lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Sat, Aug 27, 2011 at 11:29, Alexander Gladysh <agladysh@gmail.com> wrote:
> On Sat, Aug 27, 2011 at 10:55, Dirk Laurie <dpl@sun.ac.za> wrote:
>> On Fri, Aug 26, 2011 at 07:17:10PM +0200, Alexander Gladysh wrote:
>>> On Fri, Aug 26, 2011 at 21:09, Mike Pall <mikelu-1108@mike.de> wrote:
>
>>> > pairs() will not be fast, no matter what I do.
>
>>> So, any code that uses pairs() is bound to be interpreter-only, is this
>>> correct?
>
>> pairs() traverses all actually used entries in a hash table.  Although
>> in theory it takes O(n) time to traverse n pairs, in practice the big-O
>> hides a fairly substantial factor compared to ipairs().  Even if you
>> hand-code everything directly in assembler (which LuaJIT nearly does).
>
> I most likely am missing something about how LuaJIT works, so please
> correct me if I'm wrong:
>
> 1. I'm content with the fact that the pairs() would always be slow.
>
> 2. However, if pairs() abort the trace of any function...
>
> 3. ...Then that *any* function may never be compiled to the native code.
>
> 4. And that function may do something complex and optimizable besides
> calling pairs()...
>
> 5. ...Which would never be optimized due to #3.
>
> So, should I, for example, move the body of a loop with pairs() to the
> separate function so it would be compiled? Or what?

Mike, I'm very sorry to waste your time on dumb questions, but could
you please shed some light here? ("No" or "Yes" would suffice if
you're too busy to give a detailed answer.)

Thank you,
Alexander.