![](https://habrastorage.org/getpro/habr/upload_files/3fe/a27/957/3fea2795770662b1b32c11ccd21e6253.jpg)
Торстен Бейер — программист из QuantStack, в Open Source он работал над nifty и vigra на C++, а также над inferno, kipoi, ilastik — на Python. Делимся материалом о новом ядре Lua от Торстена Бейера из блога разработчиков Jupyter, пока у нас начинается флагманский курс Data Science.
![Архитектура Jupyter в двух словах Архитектура Jupyter в двух словах](https://habrastorage.org/getpro/habr/upload_files/859/0e6/07c/8590e607cb06646518be04c27b3b32e3.png)
Ключевой принцип дизайна Jupyter — языковая независимость, а одна из основных точек расширения экосистемы — ядро, то есть часть архитектуры, отвечающая за выполнение кода пользователя.
Ядро Jupyter — это просто исполняемый файл, реализующий чётко определённый протокол взаимодействия между процессами. Эталонная реализация ядра — ipykernel, ядро Python по умолчанию, также содержащая утилиты создания ядер других языков. Другая эталонная реализация — Xeus.
Xeus
Xeus — это библиотека C++ для написания ядер Jupyter. Это не ядро, а именно библиотека, которая упрощает процесс написания ядер.
Xeus реализует протокол обмена сообщениями Jupyter, поэтому авторам ядра нужно реализовать только несколько методов, связанных с собственно интерпретатором, например, выполнение фрагментов кода и его автозавершение.
Вот длинный список скриптовых языков, которые могут быть встроены в C/C++. С помощью Xeus очень легко писать ядра для этих языков, также Xeus уже использовался, чтобы написать ядра в списке ниже:
xeus-cling — C++.
xeus-python — Python.
xeus-sql/xeus-sqlite — ядро для баз данных SQL / SQLite.
LFortran — современный интерактивный компилятор Fortran с ядром Jupyter.
Библиотека xwidgets
Библиотека xwidget — это реализация протокола Jupyter Interactive Widget (протокола интерактивных виджетов) на C++. Виджеты разрабатывались для xeus-cling, ядра Xeus C++, но любое ядро на основе Xeus может повторно использовать его компоненты.
Ядро Lua на основе Xeus
Сегодня я рад объявить о релизе xeus-lua, нового ядра Jupyter для Lua на основе Xeus.
![](https://habrastorage.org/getpro/habr/upload_files/c2f/10d/96d/c2f10d96d0dc4e3214a727ac2659aa79.png)
Lua
Lua в переводе с португальского — Луна. Это легкий, встраиваемый скриптовый язык, написанный на Си.
Если Python — один из ведущих языков научных приложений, то Lua — ведущий скриптовый язык для игр и их движков.
Список использующих Lua видеоигр большой и включает игры категории AAA, такие как Crisys и Farcry. На Lua работает и Adobe Photoshop Lightroom.
Sol2
![С помощью библиотеки Sol2 Lua элегантно встраивается в C++. С помощью библиотеки Sol2 Lua элегантно встраивается в C++.](https://habrastorage.org/getpro/habr/upload_files/3cf/949/067/3cf9490677f174e65ade687d1afadcea.png)
Хотя Lua довольно легко встроить в C++, это ещё проще, если воспользоваться Sol2. Более того, Sol2 можно использовать для представления классов C++ в коде Lua, подобно тому, как pybind11 — для представления классов C++ в Python.
Xeus-lua
![Hello world на xeus-lua Hello world на xeus-lua](https://habrastorage.org/getpro/habr/upload_files/7d0/8dd/76f/7d08dd76f2d63b8b59f550a5df7bd540.gif)
При помощи Sol2 и Xeus было очень легко реализовать многофункциональное ядро на современном C++. Sol2 до тривиальности упростил представление классов xwidgets для Lua, чтобы можно было задействовать виджеты в блокнотах xeus-lua.
Но зачем ядро Lua?
Lua — возможно, не самый популярный язык в 2021 году, но есть несколько причин, по которым я решил реализовать такое ядро, и причин, почему оно полезно:
Написать ядро Xeus — лучший способ изучить его, ознакомиться с экосистемой библиотеки. На Lua легко писать, а написанный код легко внедрить, поэтому Lua и Xeus подходят друг другу идеально. Благодаря реализации своего ядра я лучше понял Xeus и сам Jupyter.
Изучение Lua с xeus-lua — это весело! До написания xeus-lua у меня не было опыта работы с Lua. В процессе я изучал Lua внутри Jupyter, играя с xwidgets в Lua.
Реализация xeus-lua может служить справочником для других авторов ядер. В будущем полезна может быть интеграция xwidgets в xeus-lua.
Программа на Lua собирается легко, поэтому xeus-lua можно собрать для WebAssembly и включить в JupyterLite — следите за блогом.
Особенности
Очевидно, xeus-lua поддерживает выполнение кода.
![Выполнение простого кода Выполнение простого кода](https://habrastorage.org/getpro/habr/upload_files/473/bcf/3cb/473bcf3cb84b1e8ed22412bc47054d60.gif)
Стримы перенаправляются на вывод блокнотов:
![Перенаправление стримов Перенаправление стримов](https://habrastorage.org/getpro/habr/upload_files/a2d/881/5cc/a2d8815cc9bbbc216d370af7a913f144.gif)
Сообщения об ошибках отображаются в выводе:
![Обработка ошибок Обработка ошибок](https://habrastorage.org/getpro/habr/upload_files/332/84c/2f7/33284c2f7f9c782cf528c395786074d5.gif)
Входные стримы перенаправляются в систему ввода:
![Пользовательский ввод Пользовательский ввод](https://habrastorage.org/getpro/habr/upload_files/cd9/8b5/45a/cd98b545a0fd1e117f54ffe8c7daeab8.gif)
Выражения могут дополняться автоматически по нажатию Tab:
![Завершение кода Завершение кода](https://habrastorage.org/getpro/habr/upload_files/2fa/829/f4d/2fa829f4dfe382ec4e3199af7e728678.gif)
Отображаются данные разных форматов: LaTeX, JSON, HTML.
![Отображение данных Отображение данных](https://habrastorage.org/getpro/habr/upload_files/081/c9c/27e/081c9c27eef039f9ce79a7ffea1bceea.gif)
Можно добавить интерактивные виджеты:
![Интерактивные виджеты Интерактивные виджеты](https://habrastorage.org/getpro/habr/upload_files/a32/48a/869/a3248a8694985347ded1b8ac7c7c8599.gif)
Можно предоставить виджетам данные:
![Бинарные буферы виджетов Бинарные буферы виджетов](https://habrastorage.org/getpro/habr/upload_files/35b/6ec/720/35b6ec720dec1baeeeef12f641c7741d.gif)
Попробовать xeus-lua прямо сейчас можно с помощью binder, просто кликните по ссылке.
Другие ядра Lua
Вот ещё несколько реализаций ядер Lua:
lupyter на основе Python. Тяжёлая работа выполняется в расширении Python на C++.
ILua — многофункциональная реализация на Python, она связывается с Lua через IPC.
IPyLua на чистом Lua.
Эти реализации обладают широкими возможностями, они хорошо работают, но ни одна не поддерживает интерактивные виджеты, а ядро xeus-lua основано на Xeus, поэтому с минимальными усилиями можно повторно использовать компоненты из экосистемы Xeus.
Поработать с Jupyter Notebook вы сможете на наших курсах:
А чтобы узнать, как мы готовим специалистов в других направлениях, вы можете посмотреть каталог курсов, пока мы следим за развитием Jupyter и событиями в науке о данных.
![](https://habrastorage.org/getpro/habr/upload_files/a57/72a/55e/a5772a55eb0b04d1c2fb9ae1c9b80506.png)
Профессии и курсы
Data Science и Machine Learning
Python, веб-разработка
Мобильная разработка
Java и C#
От основ — в глубину
А также: