[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: The Lua interpreter and large scripts
 
- From: Sean Conner <sean@...>
 
- Date: Wed, 11 Nov 2009 06:22:59 -0500
 
It was thus said that the Great Mike Pall once stated:
> Sean Conner wrote:
> >   Third example was running the Lua interpreter with the "-i" option loading
> > up show.lua, then typing
> > 	dofile("default.lua")
> > 
> >   It was the third example that took six minutes.
> 
> The "-i" option loads readline which as a side-effect initializes
> the NLS locale for the current process from the environment
> variables.
> 
> This may slow down all conversions of strings to numbers, numbers
> to strings and string comparisons. Looks like it's 30x slower in
> your case.
> 
> Try os.setlocale("C") before the dofile().
  I did that.  Still took six minutes.  I even set the locale from the
command line and tried, and it took six minutes.
  I then did a quick look at the Lua interpeter (lua.c).  The Lua function
dofile() does:
	int n = lua_gettop(L);
	luaL_loadfile(L,name);
	lua_call(L,0,LUA_MULTRET);
	return lua_gettop(L) - n;
whereas the "-i" option appears to do:
	int base = lua_gettop(L) - narg
	luaL_loadfile(L,name);
	lua_pushcfunction(L, traceback); 
	lua_insert(L, base);
	lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base);
	lua_remove(L, base);
	
  I'm still not sure why loading a small file via the "-i" option before
loading the 80M script via dofile() takes so darned long.
  -spc