Компилировать Lua-скрипты, используемые в OpenResty
В настоящее время я использую OpenResty + Lua для нескольких проектов, и мне нравится гибкость, которую дает мне Lua, фактически я написал несколько микро-веб-приложений непосредственно в сценариях Lua, которые обслуживаются Nginx-OpenResty.
Но если я хочу распространять веб-приложение, очевидно, что код Lua должен быть либо "простым", либо, по крайней мере, слегка запутанным. Вместо этого, учитывая, что LuaJIT, который я сейчас использую, компилирует Lua в нативный код, можно ли предварительно скомпилировать все сценарии Lua как нативный код (не объектные файлы lua.o) и загрузить их в OpenResty вместо прямой.lua исходные файлы?
1 ответ
Нету.
Нет способа скомпилировать код LuaJIT в машинный код. Это просто не работает по двум основным причинам:
- LuaJIT выбирает трассировки для компиляции на основе того, как часто они запускаются во время выполнения. Это означает, что сгенерированные трассировки могут изменяться в зависимости от обрабатываемых данных (например, разные
if
ветви могут быть скомпилированы в зависимости от того, какая из них берется чаще). Таким образом, невозможно предварительно скомпилировать их заранее. - Некоторые операции не могут быть скомпилированы, поскольку они еще не реализованы (например, создание замыканий), они никогда не будут в областях, которые стоит оптимизировать (например,
require
) или потому что это просто невозможно (например, вызовы функций API Lua C)
Лучше всего скомпилировать файлы Lua в байт-код LuaJIT, а вместо этого удалить информацию об отладке. Это означает, что такие вещи, как имена локальных переменных, номера строк и т. Д. Опущены, но все же могут быть разобраны.