ZeroBrane с Lua 5.4

В ZeroBrane Studio последней версии 1.9, если мы выберем пункт меню Проект, интерпретатор Lua, будет только версия до 1.3.

Как добавить 5.4? Кроме того, как установить lua 5.4 и библиотеку iuplua для 5.4? luarocks не включает его.

Заранее спасибо,

Роджер


person Roger    schedule 10.08.2020    source источник


Ответы (1)


Документация предполагает, что версия 5.4 уже установлена, но это не похоже на последнюю сборку Windows.

Загляните в каталог ZeroBrane. Есть интерпретатор папок, содержащий несколько файлов Lua. Довольно просто добавить еще один интерпретатор.

Просто возьмите его из конфигурации интерпретатора 5.3 и попробуйте. Похоже, он делает все, что касается пути.

luadeb53.lua:

dofile 'interpreters/luabase.lua'
local interpreter = MakeLuaInterpreter(5.3, ' 5.3')
interpreter.skipcompile = true
return interpreter

Поэтому я бы добавил luadeb54.lua и изменил номера версий на 5.4.

Поскольку файл ссылается на интерпретаторы / luabase.lua, откройте его и посмотрите:

function MakeLuaInterpreter(version, name)

local function exePath(self, version)
  local version = tostring(version or ""):gsub('%.','')
  local mainpath = ide:GetRootPath()
  local macExe = mainpath..([[bin/lua.app/Contents/MacOS/lua%s]]):format(version)
  return (ide.config.path['lua'..version]
    or (ide.osname == "Windows" and mainpath..([[bin\lua%s.exe]]):format(version))
    or (ide.osname == "Unix" and mainpath..([[bin/linux/%s/lua%s]]):format(ide.osarch, version))
    or (wx.wxFileExists(macExe) and macExe or mainpath..([[bin/lua%s]]):format(version))),
  ide.config.path['lua'..version] ~= nil
end

return {
  name = ("Lua%s"):format(name or version or ""),
  description = ("Lua%s interpreter with debugger"):format(name or version or ""),
  api = {"baselib"},
  luaversion = version or '5.1',
  fexepath = exePath,
  frun = function(self,wfilename,rundebug)
    local exe, iscustom = self:fexepath(version or "")
    local filepath = ide:GetShortFilePath(wfilename:GetFullPath())

    if rundebug then
      ide:GetDebugger():SetOptions({runstart = ide.config.debugger.runonstart == true})

      -- update arg to point to the proper file
      rundebug = ('if arg then arg[0] = [[%s]] end '):format(wfilename:GetFullPath())..rundebug

      local tmpfile = wx.wxFileName()
      tmpfile:AssignTempFileName(".")
      filepath = ide:GetShortFilePath(tmpfile:GetFullPath())

      local ok, err = FileWrite(filepath, rundebug)
      if not ok then
        ide:Print(("Can't open temporary file '%s' for writing: %s."):format(filepath, err))
        return
      end
    end
    local params = self:GetCommandLineArg("lua")
    local code = ([[-e "io.stdout:setvbuf('no')" "%s"]]):format(filepath)
    local cmd = '"'..exe..'" '..code..(params and " "..params or "")

    -- modify LUA_CPATH and LUA_PATH to work with other Lua versions
    local envcpath = "LUA_CPATH"
    local envlpath = "LUA_PATH"
    if version then
      local env = "PATH_"..string.gsub(version, '%.', '_')
      if os.getenv("LUA_C"..env) then envcpath = "LUA_C"..env end
      if os.getenv("LUA_"..env) then envlpath = "LUA_"..env end
    end

    local cpath = os.getenv(envcpath)
    if rundebug and cpath and not iscustom then
      -- prepend osclibs as the libraries may be needed for debugging,
      -- but only if no path.lua is set as it may conflict with system libs
      wx.wxSetEnv(envcpath, ide.osclibs..';'..cpath)
    end
    if version and cpath then
      -- adjust references to /clibs/ folders to point to version-specific ones
      local cpath = os.getenv(envcpath)
      local clibs = string.format('/clibs%s/', version):gsub('%.','')
      if not cpath:find(clibs, 1, true) then cpath = cpath:gsub('/clibs/', clibs) end
      wx.wxSetEnv(envcpath, cpath)
    end

    local lpath = version and (not iscustom) and os.getenv(envlpath)
    if lpath then
      -- add oslibs libraries when LUA_PATH_5_x variables are set to allow debugging to work
      wx.wxSetEnv(envlpath, lpath..';'..ide.oslibs)
    end

    -- CommandLineRun(cmd,wdir,tooutput,nohide,stringcallback,uid,endcallback)
    local pid = CommandLineRun(cmd,self:fworkdir(wfilename),true,false,nil,nil,
      function() if rundebug then wx.wxRemoveFile(filepath) end end)

    if (rundebug or version) and cpath then wx.wxSetEnv(envcpath, cpath) end
    if lpath then wx.wxSetEnv(envlpath, lpath) end
    return pid
  end,
  hasdebugger = true,
  scratchextloop = false,
  unhideanywindow = true,
  takeparameters = true,
}

end

return nil -- as this is not a real interpreter

Проверьте папку / bin, и вы найдете исполняемые файлы Lua. Добавить 5,4 шт.

person Piglet    schedule 10.08.2020
comment
Это правильно; вы можете добавить новый интерпретатор, как предлагал @Piglet, но вам придется сгенерировать двоичные файлы и библиотеку luasocket для 5.4. Я уже работал над этим и просто открыл заявку, за которой можно подписаться, если вы хотите увидеть, когда будут внесены изменения. - person Paul Kulchenko; 10.08.2020
comment
@Piglet Большое спасибо, я попробую, как только смогу. - person Roger; 11.08.2020