в ZeroBrane Studio, если я использую Project - компилировать (F7) - что именно происходит?
Будет ли создан отдельный файл .exe из моего кода Lua?
И если да, то в каком каталоге? Я использую Windows 10. (Не удалось найти никакой информации в документации)
LUA — ZeroBrane IDE: функция компиляции
comment
Если вы будете искать в каждом подкаталоге проекта в Проводнике, что вы обнаружите? Чем отличается чистый проект от того, который вы построили (используя Project - compile)?
- person Some programmer dude   schedule 09.09.2020
comment
Я не уверен, есть ли у меня подкаталоги проекта... у меня есть файл Singel LUA: ...\ZeroBraneStudio\myprograms\test1.lua, и если я его компилирую, он говорит: Компиляция прошла успешно; 100% вероятность успеха (1/1). Итак, компиляция прошла успешно, но где же результат?
- person Spacewalker   schedule 09.09.2020
Ответы (1)
Из того, что я вижу при беглом просмотре исходного кода, он просто проверяет, есть ли в коде какие-либо ошибки, загружая его с помощью loadstring
, который компилирует файл. Выходного файла нет, только какой-то текстовый вывод о любых ошибках.
Но это только предположение. Не стесняйтесь проверить, действительно ли это функция, вызываемая при нажатии этой кнопки.
function CompileProgram(editor, params)
local params = {
jumponerror = (params or {}).jumponerror ~= false,
reportstats = (params or {}).reportstats ~= false,
keepoutput = (params or {}).keepoutput,
}
local doc = ide:GetDocument(editor)
local filePath = doc:GetFilePath() or doc:GetFileName()
local loadstring = loadstring or load
local func, err = loadstring(StripShebang(editor:GetTextDyn()), '@'..filePath)
local line = not func and tonumber(err:match(":(%d+)%s*:")) or nil
if not params.keepoutput then ClearOutput() end
compileTotal = compileTotal + 1
if func then
compileOk = compileOk + 1
if params.reportstats then
ide:Print(TR("Compilation successful; %.0f%% success rate (%d/%d).")
:format(compileOk/compileTotal*100, compileOk, compileTotal))
end
else
ide:GetOutput():Activate()
ide:Print(TR("Compilation error").." "..TR("on line %d"):format(line)..":")
ide:Print((err:gsub("\n$", "")))
-- check for escapes invalid in LuaJIT/Lua 5.2 that are allowed in Lua 5.1
if err:find('invalid escape sequence') then
local s = editor:GetLineDyn(line-1)
local cleaned = s
:gsub('\\[abfnrtv\\"\']', ' ')
:gsub('(\\x[0-9a-fA-F][0-9a-fA-F])', function(s) return string.rep(' ', #s) end)
:gsub('(\\%d%d?%d?)', function(s) return string.rep(' ', #s) end)
:gsub('(\\z%s*)', function(s) return string.rep(' ', #s) end)
local invalid = cleaned:find("\\")
if invalid then
ide:Print(TR("Consider removing backslash from escape sequence '%s'.")
:format(s:sub(invalid,invalid+1)))
end
end
if line and params.jumponerror and line-1 ~= editor:GetCurrentLine() then
editor:GotoLine(line-1)
end
end
return func ~= nil -- return true if it compiled ok
end
person
Piglet
schedule
09.09.2020
Это правильно; компиляция просто подтверждает, что она проходит проверку синтаксиса с тем же интерпретатором Lua, на котором запущена сама IDE (Lua 5.1-совместим с парой расширений для Lua 5.2). Существует тикет, предлагающий запуск внешних компиляторов luac (зависит от версии), но он еще не реализовано.
- person Paul Kulchenko; 09.09.2020