Может ли MetaLua использоваться с LuaJIT?Может ли MetaLua использоваться с LuaJIT?
И если это так, то как?
(я не мог найти никакой достоверной информации)
Может ли MetaLua использоваться с LuaJIT?Может ли MetaLua использоваться с LuaJIT?
И если это так, то как?
(я не мог найти никакой достоверной информации)
Компилятор 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 крайне маловероятно.
Ответ зависит от того, что вы пытаетесь с ним сделать. Есть некоторые компоненты, которые не зависят от 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.
Что вы пробовали, во всяком случае? Замените lua.exe на luajit.exe в Makefile? – Schollii
Какую проблему вы пытаетесь решить с помощью Metalua? Возможно, это можно сделать более простым способом. –