···<Datum: Monday, 05. August 2013>···<Von: Reinhard Kotucha>···
> On 2013-08-05 at 17:51:04 +0300, Wolfgang Jeltsch wrote: > > > Am Samstag, den 03.08.2013, 21:21 +0200 schrieb Philipp Gesang: > > > ···<date: 2013-08-03, Saturday>···<from: Wolfgang Jeltsch>··· > > > > I think I have found the source of the problem. In Lua 5.1, unpack is a > > > > global function, while in Lua 5.2, it is a field of the global variable > > > > table. To ensure compatibility with both Lua versions, some Lua files > > > > (lualibs-basic-merged.lua, lualibs-lua.lua, and luaotfload-merged.lua) > > > > contain the following code: > > > > > > > > if not table.unpack then > > > > table.unpack=_G.unpack > > > > elseif not unpack then > > > > _G.unpack=table.unpack > > > > end > > > > > > Packages shouldn’t write to _G. > > > > I’m aware that this is an ugly hack, not only because _G is modified, > > but also because table is modified. I think it would be more appropriate > > to use a local variable unpack defined as follows: > > > > local unpack > > if table.unpack then > > unpack = table.unpack > > else > > unpack = _G.unpack > > end > > I don't think that it's wrong to provide table.unpack if it doesn't > exist already. LuaTeX already extends the string library similarly > (string.explode). In most documents the fallback is available through luaotfload or lualibs since l-lua.lua establishes a compatibility layer [1]. In any case, the *global* “unpack” should only be written to by low-level packages (ideally by the format, else perhaps luatexbase). <... /> > local unpack=table.unpack > > but it's not necessary to do it globally. You may want to create a > local unpack within a function definition or a do-block. That’s the preferred way, a local copy is faster anyways. > I'm not sure whether it's necessary to support Lua 5.1 here since TeX > Live 2012 is frozen. Backwards compatibility makes only sense if > there is a severe bug in TL-2012. Aiming for full compatibility is impractical due to the changes Lua 5.2 introduced on the syntactical level: newlines preceding function parameters, the goto statement, and "\z". That aside, compatibility with earlier versions of Luatex is of value when testing for regressions. And don’t forget: CTAN still has 0.70.1 [2]. Best regards, Philipp [1] https://github.com/lualatex/lualibs/blob/master/lualibs-lua.lua#L87 [2] http://ctan.org/pkg/luatex
pgpMRBGcRVRyX.pgp
Description: PGP signature
