
Торстен Бейер — программист из QuantStack, в Open Source он работал над nifty и vigra на C++, а также над inferno, kipoi, ilastik — на Python. Делимся материалом о новом ядре Lua от Торстена Бейера из блога разработчиков Jupyter, пока у нас начинается флагманский курс Data Science.

Ключевой принцип дизайна 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.

Lua
Lua в переводе с португальского — Луна. Это легкий, встраиваемый скриптовый язык, написанный на Си.
Если Python — один из ведущих языков научных приложений, то Lua — ведущий скриптовый язык для игр и их движков.
Список использующих Lua видеоигр большой и включает игры категории AAA, такие как Crisys и Farcry. На Lua работает и Adobe Photoshop Lightroom.
Sol2

Хотя Lua довольно легко встроить в C++, это ещё проще, если воспользоваться Sol2. Более того, Sol2 можно использовать для представления классов C++ в коде Lua, подобно тому, как pybind11 — для представления классов C++ в Python.
Xeus-lua

При помощи 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 поддерживает выполнение кода.

Стримы перенаправляются на вывод блокнотов:

Сообщения об ошибках отображаются в выводе:

Входные стримы перенаправляются в систему ввода:

Выражения могут дополняться автоматически по нажатию Tab:

Отображаются данные разных форматов: LaTeX, JSON, HTML.

Можно добавить интерактивные виджеты:

Можно предоставить виджетам данные:

Попробовать xeus-lua прямо сейчас можно с помощью binder, просто кликните по ссылке.
Другие ядра Lua
Вот ещё несколько реализаций ядер Lua:
lupyter на основе Python. Тяжёлая работа выполняется в расширении Python на C++.
ILua — многофункциональная реализация на Python, она связывается с Lua через IPC.
IPyLua на чистом Lua.
Эти реализации обладают широкими возможностями, они хорошо работают, но ни одна не поддерживает интерактивные виджеты, а ядро xeus-lua основано на Xeus, поэтому с минимальными усилиями можно повторно использовать компоненты из экосистемы Xeus.
Поработать с Jupyter Notebook вы сможете на наших курсах:
А чтобы узнать, как мы готовим специалистов в других направлениях, вы можете посмотреть каталог курсов, пока мы следим за развитием Jupyter и событиями в науке о данных.

Профессии и курсы
Data Science и Machine Learning
Python, веб-разработка
Мобильная разработка
Java и C#
От основ — в глубину
А также: