[pypy-dev] hash negotiation
tismer at tismer.com
Sat Mar 1 20:01:18 CET 2003
additional to an integer change, I also saw a change of
the hash implementation:
def int_hash(space, w_int1):
#/* XXX If this is changed, you also need to change the way
# Python's long, float and complex types are hashed. */
## x = w_int1.intval
## if x == -1:
## x = -2
## return W_IntObject(x)
# XXX unlike CPython we have no need to special-case the value -1
I intentionally repeated CPython's implementation, which special
cases -1 as an indicator for "no hash computed yet".
It may negotiable whether we want to preserve an extra flag
in all the hashable objects whether the hash has been computed,
or repeat CPython's way to preserve a single value for this.
This is a part of CPython's object protocol, and I believe
we *have* to decide about this together. It cannot be our
style just to remove something without notice.
How hashes are computed has two impacts which we need decide
- If we aim at CPython compatibilty at some time, we might
keep the door open to do exactly the same here.
- If we want to provide *functional* compatibility with CPython's
hash values, then we need to provide exactly the same values,
or programs relying on hash values will behave differently.
I have no problem to have different implementations, it might
even make sense to add a config variable, how compatible we want
But since hash() is an exposed function, we need at least
be aware when we change something visible, and we need to express
whether we care about that or not.
Obviously, my default way of doing things "when in doubt, then
do what the C code does" isn't shared by Armin.
Creating an almost CPython compatible implementation was one
of the targets from the beginning, and I don't remember that
we have dispensed of possible targets, already.
So I'd like to ask for your opinions about stuff like that.
cheers - chris
Christian Tismer :^) <mailto:tismer at tismer.com>
Mission Impossible 5oftware : Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9a : *Starship* http://starship.python.net/
14109 Berlin : PGP key -> http://wwwkeys.pgp.net/
work +49 30 89 09 53 34 home +49 30 802 86 56 pager +49 173 24 18 776
PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04
whom do you want to sponsor today? http://www.stackless.com/
More information about the Pypy-dev