MetaLua可以与LuaJIT一起使用吗?

时间:2014-01-03 20:17:03

标签: lua luajit metalua

MetaLua可以与LuaJIT一起使用吗?

如果是这样,那怎么样?

(我找不到任何可靠的信息)

2 个答案:

答案 0 :(得分:3)

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的开箱即用的可能性很小。

答案 1 :(得分:3)

答案取决于您尝试使用它做什么。有一些组件不依赖于Lua OPcodes并且将在LuaJIT上运行,并且一些组件具有Lua特有的功能,并且不会在LuaJIT上运行(因为它具有不同的OPcode)。

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

请注意,metalua github repository有一些分支,其中包含较新的metalua代码;例如,tilo branch包括v0.6,而master分支似乎只包含v0.5。您可能对较新版本感兴趣的原因是,有一些refactoring done可以简化Lua部分的使用。