[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: thread state and dynamically loadable library
- From: Doug Currie <doug.currie@...>
- Date: Tue, 5 Sep 2006 17:21:10 -0400
Tuesday, September 5, 2006, 2:29:39 PM, Edgar Toernig wrote:
> Module private registries are easy:
> #define MY_REGISTRY lua_upvalueindex(1)
> and then make sure that you put the registry table into the first
> upvalue of each function of your module.
Yes, I see. That would be a bit faster and safer than using the global
registry, at the cost of an extra slot in each of the closures.
But wait! Lua 5.1's LUA_ENVIRONINDEX can create a shared environment
among the C functions without adding any closure slots. This is not
too well documented (at least I couldn't find anything that made it
clear to me until I read the source code).
I finally found Mike Pall's example; it is instructive despite being
primarily concerned with userdata environments, "the example shows how
to use the new C function environment, too"
I also now appreciate Luis Carvalho's suggestion in
"For more examples of LUA_ENVIRONINDEX, check liolib.c."