2

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

但是,如果我想分发 Web 应用程序,显然 Lua 代码应该是“简单的”,或者至少应该稍微混淆一下。相反,考虑到我目前使用的 LuaJIT 将 Lua 编译为本机代码,是否可以将所有 Lua 脚本预编译为本机代码(不是 lua .o 目标文件),并将它们加载到 OpenResty 中,而不是直接加载 .lua源文件?

4

1 回答 1

3

没有。

没有办法将 LuaJIT 代码编译为机器码。它根本不起作用,主要有两个原因:

  1. LuaJIT 根据运行时运行的频率选择要编译的跟踪。这意味着生成的跟踪可能会根据正在处理的数据而变化(例如,if可以根据更频繁地使用哪个分支来编译不同的分支)。因此,不可能提前预编译它们。
  2. 有些操作无法编译,因为它还没有实现(例如闭包创建),它永远不会在值得优化的领域(例如require),或者因为它根本不可能(例如调用 Lua C API 函数)

最好的办法是将 Lua 文件编译为 LuaJIT 字节码,并去掉调试信息。这意味着局部变量名称、行号等内容被省略,但仍然可以反汇编。

于 2014-11-27T15:59:15.707 回答