编译在OpenResty上使用的Lua脚本。

我目前在几个项目中使用 OpenResty+Lua,我喜欢 Lua 给我的灵活性,实际上我直接在 Lua 脚本中编写了一些微型 web 应用,并由 Nginx-OpenResty 提供服务。

但是,如果我想分发 web 应用程序,显然 Lua 代码应该是“纯”的或者至少稍微模糊一下。而考虑到我目前正在使用的 LuaJIT 将 Lua 编译为本地代码,是否可以将所有 Lua 脚本预编译为本地代码(而不是 Lua .o 对象文件),并在 OpenResty 中加载它们,而不是直接使用 .lua 源文件?

点赞
用户646619
用户646619

不行。

LuaJIT无法将代码编译成机器码。这是因为有两个主要原因:

  1. LuaJIT基于运行时被运行的次数来选择编译跟踪信息。这意味着生成的跟踪信息会因为处理的数据而不同(例如,不同的if条件分支会根据使用频率进行编译)。因此,无法提前预编译它们。

  2. 一些操作无法编译,因为它们尚未实现(例如,闭包创建),它们在值得优化的领域中不必存在(例如,require),或者因为它们根本不可能(例如,调用Lua C API函数)。

最好的办法是将Lua文件编译成没有调试信息的LuaJIT字节码。这意味着诸如本地变量名,行号等信息将被省略,但仍可以反汇编。

2014-11-27 15:59:15