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


Архитектура Jupyter в двух словах
Архитектура Jupyter в двух словах

Ключевой принцип дизайна Jupyter — языковая независимость, а одна из основных точек расширения экосистемы — ядро, то есть часть архитектуры, отвечающая за выполнение кода пользователя.

Ядро Jupyter — это просто исполняемый файл, реализующий чётко определённый протокол взаимодействия между процессами. Эталонная реализация ядра — ipykernel, ядро Python по умолчанию, также содержащая утилиты создания ядер других языков. Другая эталонная реализация — Xeus.


Xeus

Xeus — это библиотека C++ для написания ядер Jupyter. Это не ядро, а именно библиотека, которая упрощает процесс написания ядер. 

Xeus реализует протокол обмена сообщениями Jupyter, поэтому авторам ядра нужно реализовать только несколько методов, связанных с собственно интерпретатором, например, выполнение фрагментов кода и его автозавершение. 

Вот длинный список скриптовых языков, которые могут быть встроены в C/C++. С помощью Xeus очень легко писать ядра для этих языков, также Xeus уже использовался, чтобы написать ядра в списке ниже:

Библиотека 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

С помощью библиотеки Sol2 Lua элегантно встраивается в C++.
С помощью библиотеки Sol2 Lua элегантно встраивается в C++.

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

Xeus-lua

Hello world на xeus-lua
Hello world на 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 и событиями в науке о данных.

Профессии и курсы

Комментарии (0)