[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: New object system in 7 LoC
- From: Michal Kottman <k0mpjut0r@...>
- Date: Sun, 20 Nov 2011 20:20:58 +0100
Just a little note, this:
> local env = setmetatable({}, {__index = function(_, k) return _G[k] end})
Is equivalent to this:
> local env = setmetatable({}, {__index = _G})
The second approach is a bit faster (warning: a very simplistic
micro-benchmark follows):
local N = 10000000
function runBench(name, env)
local start = os.clock()
for i=1,N do local x = env.print end
local time = os.clock() - start
print(name, time)
end
runBench('__index function', setmetatable({}, {__index = function(_,k)
return _G[k] end}))
runBench('__index table', setmetatable({}, {__index = _G}))
This is on a 2.3GHz Core i5 with Lua 5.1.4:
__index function 1.062802
__index table 0.372607
> Is this old? Is this new? Has this been done before?
The idea of not needing a colon for method call is not new - objects
via closures are discussed in PiL [1], and can be seen in various
projects like Lunatic Python [2].
[1] http://www.lua.org/pil/16.4.html
[2] http://labix.org/lunatic-python