Компилировать Lua-скрипты, используемые в OpenResty

В настоящее время я использую OpenResty + Lua для нескольких проектов, и мне нравится гибкость, которую дает мне Lua, фактически я написал несколько микро-веб-приложений непосредственно в сценариях Lua, которые обслуживаются Nginx-OpenResty.

Но если я хочу распространять веб-приложение, очевидно, что код Lua должен быть либо "простым", либо, по крайней мере, слегка запутанным. Вместо этого, учитывая, что LuaJIT, который я сейчас использую, компилирует Lua в нативный код, можно ли предварительно скомпилировать все сценарии Lua как нативный код (не объектные файлы lua.o) и загрузить их в OpenResty вместо прямой.lua исходные файлы?

1 ответ

Решение

Нету.

Нет способа скомпилировать код LuaJIT в машинный код. Это просто не работает по двум основным причинам:

  1. LuaJIT выбирает трассировки для компиляции на основе того, как часто они запускаются во время выполнения. Это означает, что сгенерированные трассировки могут изменяться в зависимости от обрабатываемых данных (например, разные if ветви могут быть скомпилированы в зависимости от того, какая из них берется чаще). Таким образом, невозможно предварительно скомпилировать их заранее.
  2. Некоторые операции не могут быть скомпилированы, поскольку они еще не реализованы (например, создание замыканий), они никогда не будут в областях, которые стоит оптимизировать (например, require) или потому что это просто невозможно (например, вызовы функций API Lua C)

Лучше всего скомпилировать файлы Lua в байт-код LuaJIT, а вместо этого удалить информацию об отладке. Это означает, что такие вещи, как имена локальных переменных, номера строк и т. Д. Опущены, но все же могут быть разобраны.

Другие вопросы по тегам