Интеграция Lua и Python
Сегодня мы познакомимся с интересным проектом под названием Lupa, который позволяет запускать Lua в среде Python и наоборот.
Зачем его использовать?
Lua - такой же динамичный язык, как Python, но LuaJIT компилирует его в очень быстрый машинный код, иногда быстрее, чем многие статически языки. Языковая среда выполнения очень мала и тщательно разработана для встраивания. Полный бинарный модуль Lupa, включая статически связанную среду выполнения LuaJIT2, весит всего около 700 КБ на 64-разрядной машине. Со стандартным Lua 5.1 он составляет менее 400 КБ.
Однако в экосистеме Lua отсутствуют многие элементы управления, которые Python легко включает либо в свою стандартную библиотеку, либо в виде сторонних пакетов. Это делает написание реальных приложений Lua более сложным, чем аналогичных приложений на Python. Поэтому Lua обычно не используется в качестве основного языка для больших приложений, но он обеспечивает быстрый, высокоуровневый и ресурсоемкий язык резервного копирования внутри Python, когда требуется скорость, а цикл редактирования-компиляции-запуска бинарных модулей слишком тяжелый и слишком статичный для гибкой разработки или горячего развертывания.
Установка
- Установить Python
- Ввести в командную строку pip install lupa
Быстрый старт
Более подробно на GitHub
from lupa import LuaRuntime
lua = LuaRuntime(unpack_returned_tuples=True)
l = lua.globals()
# Создать lua функцию
lua_add = lua.eval('function(a, b) return a+b end')
print(lua_add(5,6)) # 11
# Создать lua таблицу
lua_tbl = lua.eval('{a=1, b=2}')
for k, v in lua_tbl.items():
print(k, v) # b 2, a 1
# Выполнить код
lua_code = '''
myObj = {}
myObj.value = 5
myObj.set_value = function(val)
myObj.value = val
end
'''
lua.execute(lua_code)
myObj = l.myObj
print(myObj.value) # 5
myObj.set_value(7)
print(myObj.value) # 7
Результат
Lua код успешно соединился с библиотекой plotly для визуализации данных: