[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: caching anonymous closures called in-place in 5.2
- From: David Manura <dm.lua@...>
- Date: Tue, 14 Sep 2010 23:28:54 -0400
In order for the following code to cache closures in 5.2.0-work4,
for i=1,1000 do
print((function()
if i % 2 == 0 then return false else return i end
end)())
end
it currently needs to be rewritten as
for i=1,1000 do
print((function(i)
if i % 2 == 0 then return false else return i end
end)(i))
end
Couldn't it cache this case without rewriting? Defining an anonymous
function and then immediately calling it (once) is a common pattern
for doing statements inside expressions. The lifetime of such a
function does not extend beyond that normal lifetime of its variables,
so it's not really used as a closure. That is true unless you did
something odd with the debug library to grab the currently running
function and store it away somewhere for later use.