[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: absence of a __hash metamethod
- From: Colin <share-lua@...>
- Date: Mon, 19 Nov 2007 19:33:38 +0100
On Fri, Nov 16, 2007 at 09:05:48AM +0900, Miles Bader wrote:
> Colin <email@example.com> writes:
> > I would guess that one of the reasons of the missing __hash meta event is
> > that it's not that easy to design -- how do you make sure that the __hash
> > meta event is "compatible" with the Lua hash function and the other table
> > internals?
> Not to mention a non-negligible speed hit in a rather critical area of
> Lua! Making table lookups slower makes _everything_ slower.
(As long as its not slower than the workarounds ... for me, the suggestion
of creating caches of all userdata objets to reuse the same when whenever
one with the same value is needed does not sound too good because in my
application typically much more userdata objects are created than are used
for table lookups.)
> It would probably be much more acceptable if user-defined __hash hooks
> were only used for tables with some flag turned on (which could be
> tested very quickly in the C core), with that flag defaulting to off.
Hm, this, and the suggestion of using the index/newindex metamethods does
not work for me either because I want the mechanism to work by default,
however it gave me the following idea:
How about a flag on every userdata object that switches between the current
pointer-based hashing for tables, and one that uses the actual userdata (of
which the address and length is known) i.e. one could use the same hashing
as for strings, and memcmp() for the equality check)?