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.