2014-01-03 4 views
3

Может ли MetaLua использоваться с LuaJIT?Может ли MetaLua использоваться с LuaJIT?

И если это так, то как?

(я не мог найти никакой достоверной информации)

+1

Что вы пробовали, во всяком случае? Замените lua.exe на luajit.exe в Makefile? – Schollii

+1

Какую проблему вы пытаетесь решить с помощью Metalua? Возможно, это можно сделать более простым способом. –

ответ

3

Компилятор Metalua, кажется, написано в Lua и Metalua, так теоретически да. makefile раскрывает некоторые интересные фрагменты ядра. Кажется, что Metalua работает на вершине Луа.

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. Просто заменить LUAC экземпляром LuaJIT не будет. Следующие строки должны быть скорректированы для make-файла, совместимого с LuaJIT.

${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, учитывая, что они ссылаются на МПУЕ-Lua опкоды и байткод, которые определенно несовместимы с LuaJIT.

Я бы сказал, что если это возможно, то это, конечно же, потребует некоторого перепрограммирования компилятора, но использование готового продукта с LuaJIT крайне маловероятно.

3

Ответ зависит от того, что вы пытаетесь с ним сделать. Есть некоторые компоненты, которые не зависят от Loo OPcodes и будут работать на LuaJIT и некоторых компонентах, которые делают и как таковые специфичны для Lua, и не будут работать на LuaJIT (поскольку у него разные OPcodes).

Эти компоненты, которые являются общими, все еще могут быть полезны. Например, Lua IDE, над которым я работаю, использует Lua Inspect, который опирается на metalua, чтобы обеспечить синтаксический анализ АСТ. Я извлек те модули, которые мне нужны, и реализовал a wrapper, который загружает эти модули в правильном порядке. Вся эта функциональность работает на LuaJIT (2.0.2) без каких-либо проблем.

Отметьте, что metalua github repository имеет несколько филиалов, включая новый код metalua; например, tilo branch включает v0.6, в то время как главная ветвь, как представляется, включает только v0.5. Причина, по которой вас может заинтересовать более новая версия, заключается в том, что для упрощения использования только частей Lua было около refactoring done.