Guido van Rossum wrote: > On Wed, Jul 2, 2008 at 5:31 AM, Nick Coghlan <ncoghlan at gmail.com> wrote: >> I've posted a possible fix for the __hash__ backwards incompatibilities >> described in issue 2235 [1]. >> >> The patch uses a model similar to that used in Py3k (using None is indicate >> "don't inherit __hash__"), but extends it to allowing Py_None to be >> explicitly stored in the tp_hash slot. The major downside is that we suffer >> the cost of an extra pointer comparison on every call to PyObject_Hash, but >> I wasn't able to come up with another solution that preserved backwards >> compatibility while still allowing collections.Hashable to function >> correctly. > >>From your description it seems storing Py_None in the slot acts as a > magic value meaning "this is defined but not usable". However it used > to be pretty common for various code around to call various slots > directly (after a NULL) check. That would have disastrous results if > the slot value was Py_None. Would it be terribly inconvenient if the > magic value was in fact another function, with a public name), whose > sole purpose was to raise an exception? Not only not inconvenient, but a significant improvement - as well as addressing your concern that I missed some code that calls tp_hash directly (a concern that I share, particularly since it could be an extension module we don't control that ends up doing it), it also gets rid of that extra pointer comparison in PyObject_Hash that was bothering me. >> The patch involves a few changes to fairly deep components in typeobject.c >> though, so I'd like at least some kind of sanity check before I commit it. >> >> Cheers, >> Nick. >> >> [1] http://bugs.python.org/issue2235 > > I can't promise I'll have time to look at this before my EuroPython > keynote, but it's important for me to get it right, so if nobody else > jumps in, remind me Tuesday. I'd now advise waiting until I have a chance to implement your idea anyway :) Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia --------------------------------------------------------------- http://www.boredomandlaziness.org
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4