Re: Faster 'generic for' for raw table
Spar <[email protected]> Fri, 12 Jun 2026 15:08:04 +0300
| Newsgroups | gmane.comp.lang.lua.general |
|---|---|
| Message-ID | <f48eda4a-2d4e-47d3-ba11-677abb2f643c@Spark> |
As a reference, LuaJIT has some heuristics if for generator is called ipairs or pairs it will generate code better or faster code. It emits different bytecode On 12 Jun 2026 at 14:51 +0300, 云风 Cloud Wu <[email protected]>, wrote: > Lua 5.0 introduced generic for/pairs to replace Lua 4.0's direct > iteration of raw tables. While generic for is very powerful, there's a > small issue - it's somewhat slower because a function call is required > for each iteration. > > I hope Lua can continue providing a direct way to iterate raw tables, > such as maintaining Lua 4.0's behavior when the first parameter of > generic for is 'nil' by iterating the second table object. > > I wrote a small piece of code to conduct a comparative test between > Lua 5.5 and a minor patch I implemented in Lua 5.5 (Using lua_next > replaced ProtectNT(luaD_call(L, ra + 3, GETARG_C(i))); /* do the call > */ in the case OP_TFORCALL) > > local t = {} > for i = 1, 100000000 do > t[i] = i > end > > local ti = os.clock() > for k in pairs(t) do > end > ti = os.clock() - ti > print(ti) > > The original lua 5.5 cost 0.97s , and patched version (using lua_next > instead of luaD_call) cost 0.42s . It's almost twice as fast. > Considering that most scenarios involve iterating raw tables, I > believe this optimization is meaningful. > > -- > http://blog.codingnow.com > > -- > You received this message because you are subscribed to the Google Groups "lua-l" group. > To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. > To view this discussion visit https://groups.google.com/d/msgid/lua-l/CAJnYMr1V547AwTBnURckKDNbMmO85_L9WLZ28SiGK46kiUxfgQ%40mail.gmail.com. -- You received this message because you are subscribed to the Google Groups "lua-l" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/lua-l/f48eda4a-2d4e-47d3-ba11-677abb2f643c%40Spark.