On Sat, Sep 26, 2015 at 4:22 PM, Orion Poplawski <or...@cora.nwra.com> wrote:
> On 09/25/2015 03:04 PM, Hans Hagen wrote: > >> On 9/25/2015 4:09 PM, Orion Poplawski wrote: >> >>> I'm just starting to take a look how luatex makes use of lua. And it >>> appears that luatex does not merely use lua, but extends it in various >>> ways, essentially creating new lua dialect. Is the assessment correct? >>> Is there any documentation on this? >>> >> >> Indeed we have some more on board. Keep in mind that lua is used as >> extension language so whenever it's used in an application there can be >> extensions. >> >> Btw, a dialect implies a different language. Adding a couple of >> functions is not making it a dialect. >> > > You appear to be extending it in at least four areas by adding new > functions, and replacing some as described below. liolibext is the most > "entangled" due to duplicating liolib code, lstrlibext also uses some Lua > internals that are not normally exposed to consumers of Lua (e.g. > lua_lock). I'm fine with not calling this a new "dialect", but it is > certainly extended, though modifying popen()/read()/lines() is > interesting. I'm interested to know if there has been any discussion with > the Lua maintainers about incorporating any of these changes in Lua proper? > > liolibext.c: > /* This extension only replaces one function: io.popen() and two > metatable entries: f:read() and f:lines() but unfortunately > it has to copy quite a bunch of lines from the original liolib.c > to do so. > */ > > llfslibext.c: adds to lfs: > lua_setfield(L, -2, "isdir"); > lua_pushcfunction(L, file_is_file); > lua_setfield(L, -2, "isfile"); > lua_pushcfunction(L, read_link); > lua_setfield(L, -2, "readlink"); > lua_pushcfunction(L, get_short_name); > lua_setfield(L, -2, "shortname"); > > loslibext.c: > lua_getglobal(L, "os"); > lua_pushcfunction(L, ex_sleep); > lua_setfield(L, -2, "sleep"); > lua_pushliteral(L, OS_PLATTYPE); > lua_setfield(L, -2, "type"); > lua_pushliteral(L, OS_PLATNAME); > lua_setfield(L, -2, "name"); > lua_pushcfunction(L, ex_uname); > lua_setfield(L, -2, "uname"); > #if (! defined (_WIN32)) && (! defined (__SUNOS__)) > lua_pushcfunction(L, os_times); > lua_setfield(L, -2, "times"); > #endif > #if ! defined (__SUNOS__) > lua_pushcfunction(L, os_gettimeofday); > lua_setfield(L, -2, "gettimeofday"); > #endif > > if (!safer) { > lua_pushcfunction(L, os_setenv); > lua_setfield(L, -2, "setenv"); > lua_pushcfunction(L, os_exec); > lua_setfield(L, -2, "exec"); > lua_pushcfunction(L, os_spawn); > lua_setfield(L, -2, "spawn"); > lua_pushcfunction(L, os_execute); > lua_setfield(L, -2, "execute"); > lua_pushcfunction(L, os_tmpdir); > lua_setfield(L, -2, "tmpdir"); > } > > lstrlibext.c > {"utfvalues", str_utfvalues}, > {"utfcharacters", str_utfcharacters}, > {"characters", str_characters}, > {"characterpairs", str_characterpairs}, > {"bytes", str_bytes}, > {"bytepairs", str_bytepairs}, > {"explode", str_split}, > {"dump", str_dump}, > > Also, is luajit used in the same way, or would it be possible to use a >>> system installed luajit in building luatex? >>> >> >> The only benefit of luajit is the faster virtual machine. A downside is >> that there are some limitations in memory cq. stack usage. We use a >> patch that makes the string hashing faster (we use the normal lua method >> instead of the luajit one that is optimizied for urls and that can make >> luajit slower than lua). >> >> Becaus eluatex uses lua as extension language it will always be shipped >> with a specific version (linked in or alongside the binary). >> >> Hans >> > > FWIW - Here are some changes I had to make while trying to compile against > lua 5.3: > > Thank you for the patches --- do they also work for luajittex ? -- luigi
_______________________________________________ dev-luatex mailing list dev-luatex@ntg.nl http://www.ntg.nl/mailman/listinfo/dev-luatex