[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Lua hashes
- From: Andre de Leiradella <aleirade@...>
- Date: Mon, 12 Oct 2009 17:28:04 -0300
When __index and __newindex are implemented in C, one has to compare the
key with a list of strings to find out what key was passed in. I usually
have all strings I need to compare fed to gperf, and use gperf to
translate the string to an integer which then I can put in a switch for
example. But gperf has to compute the hash of the string and ultimately
compare the string to avoid false positives.
If key hashes are available to these metamethods, I can get rid of gperf
and string by string comparisons. If the hash function is good enough, I
can even live without one single string comparison, relying only on the
For this to be possible, I'd also need easy access to Lua's hashes to
pre-hash my strings and use the resulting hash in my code.
It would also be interesting to be able to override the default hashes.
So what I'd like to know is:
1. Is it possible to change __index and __newindex to receive the hash
of the key?
2. Is it possible to expose Lua's hash functions to user code?
3. Is it possible to change Lua's hash functions to allow for
experimentation with different hashes?
I know all three can be done by changing Lua, but I'd rather have them
inside the core.
1 and 2 doesn't affect code performance (ok, in 1 an extra parameter
must be pushed on the stack...) 3 might affect performance a little
since hash functions would be calls to function pointers, unless it's a
compile time feature.