For a function inside another function, does Lua "instantiate" the inner function on each call to the outer function? If so, would bar() in the code below perform worse than foo()?
local function a()
  print 'a'
end
function foo()
  a()
end
function bar()
  function b()
    print 'b'
  end
  b()
end
                a and b both global, no embedding.$ cat junk.lua ; time lua junk.lua
function a(n)
    return n + 1
end
function b(n)
    return a(n)
end
for c = 1, 10000000 do
    b(c)
end
real    0m1.743s
user    0m1.740s
sys 0m0.000s
User time: 1.74s.
a local, b global, no embedding.local function a(n)
    return n + 1
end
function b(n)
    return a(n)
end
for c = 1, 10000000 do
    b(c)
end
real    0m1.388s
user    0m1.390s
sys 0m0.000s
User time 1.39s.
a and b both local, no embedding.$ cat junk.lua ; time lua junk.lua
local function a(n)
    return n + 1
end
local function b(n)
    return a(n)
end
for c = 1, 10000000 do
    b(c)
end
real    0m1.194s
user    0m1.200s
sys 0m0.000s
User time 1.2s.
a embedded in b, a global, b local.$ cat junk.lua ; time lua junk.lua
local function b(n)
    function a(n)
        return n + 1
    end
    return a(n)
end
for c = 1, 10000000 do
    b(c)
end
real    0m2.804s
user    0m2.790s
sys 0m0.000s
User time: 2.79s. (!)
a embedded in b, both local.$ cat junk.lua ; time lua junk.lua
local function b(n)
    local function a(n)
        return n + 1
    end
    return a(n)
end
for c = 1, 10000000 do
    b(c)
end
real    0m2.540s
user    0m2.530s
sys 0m0.000s
User time: 2.53s.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With