MetaLua能与LuaJIT一起使用吗?

能否使用 MetaLua 和 LuaJIT?

如果可以,怎样做?

(我找不到可靠的信息)

点赞
用户828255
用户828255

Metalua 编译器似乎是用 Lua 和 Metalua 写成的,因此在理论上是可以的。makefile 展示了一些有趣的核心部件。Metalua 本身似乎运行在 Lua 之上。

cat > ${BUILD_BIN}/metalua <<EOF
#!/bin/sh
export LUA_PATH='?.luac;?.lua;${BUILD_LIB}/?.luac;${BUILD_LIB}/?.lua'
export LUA_MPATH='?.mlua;${BUILD_LIB}/?.mlua'
${LUA} ${BUILD_LIB}/metalua.luac \$*
EOF

然而,LuaJIT 不像 LuaC 那样能够通过命令行将多个脚本编译成一个输出文件。简单地用 LuaJIT 替换 LUAC 是不够的。以下代码行必须进行调整,以便创建兼容 LuaJIT 的 makefile。

${LUAC} -o ${BUILD_LIB}/metalua/bytecode.luac lopcodes.lua lcode.lua ldump.lua compile.lua
${LUAC} -o ${BUILD_LIB}/metalua/mlp.luac lexer.lua gg.lua mlp_lexer.lua mlp_misc.lua mlp_table.lua mlp_meta.lua mlp_expr.lua mlp_stat.lua mlp_ext.lua

不幸的是,部分编译到 bytecode.luac 文件中的内容与 PUC-Lua 操作码和字节码相关,这些内容与 LuaJIT 明显不兼容。

我认为,如果可能的话,这肯定需要重新编程编译器,但使用 LuaJIT 的开箱即用功能的可能性非常小。

2014-01-04 15:38:23
用户1442917
用户1442917

答案取决于您想用它做什么。有些组件不依赖于 Lua OPcodes,并且可以在 LuaJIT 上运行,而有些组件则依赖于 Lua,因此是特定于 Lua 的,并且不能在 LuaJIT 上运行(因为它具有不同的 OPcodes)。

那些通用的组件仍然有用。例如,我正在开发的 Lua IDE 使用 Lua Inspect,它依赖于 metalua 来提供 AST 解析。我提取了我需要的那些模块,并实现了 一个包装器,以正确的顺序加载这些模块。所有这些功能都可以在 LuaJIT(2.0.2)上运行,没有任何问题。

请注意,metalua github 仓库 有一些包含更新的 metalua 代码的分支;例如,tilo 分支包括 v0.6,而主分支似乎仅包括 v0.5。您可能会对更新的版本感兴趣,因为有一些重构工作使 Lua 独有部分的使用更简单。

2014-01-05 04:59:03