On 7 April 2015 at 23:43, Rena <hyperhacker@gmail.com> wrote:
I suppose you might see some performance gain (at the cost of memory)
by having an array associated with each userdata, which stores
pointers to C functions for each metamethod at particular indexes.
(e.g. metamethods[0] is __index, metamethods[1] is __newindex, etc.)
If the pointer is NULL, then you look in the metatable. That would be
something Lua could manage internally when you set or modify the
metatable.
Someone would have to try it and see if there's any significant
performance gain. It could be implemented as a compile-time option.
Yes that is what I was thinking of. In the evolution of Lua perhaps
this has already been tried, tested and discarded as not beneficial,
hence my point about possibly going over old ground.
I think there are two issues:
a) reducing the cost of lookup
b) reducing the cost of function call
The latter is much harder I suspect as any function call must go
through the Lua stack. In very specific cases maybe this could be
avoided - e.g. performing a get on an array, but in general the stack
discipline is important for the garbage collector as described in Lua
papers.