At 12:27 PM 12/3/2007 -0700, Neil Toronto wrote: >Guido van Rossum wrote: > > On Dec 2, 2007 12:49 PM, Neil Toronto <[EMAIL PROTECTED]> wrote: > >> It turned out not *that* hard to code around for attribute caching, and > >> the extra cruft only gets invoked on a cache miss. The biggest problem > >> isn't speed - it's that it's possible (though extremely unlikely), while > >> testing keys for equality, that a rich compare alters the underlying > >> dict. This causes the caching lookup to have to try to get an entry > >> pointer again, which could invoke the rich compare, which might alter > >> the underlying dict.. > > > > How about subclasses of str? These have all the same issues... > >Yeah. I ended up having it, per class, permanently revert to uncached >lookups when it detects that a class dict in the MRO has non-string >keys. That's flagged by lookdict_string, which uses PyString_CheckExact.
I'm a bit confused here. Isn't the simplest way to cache attribute lookups to just have a cache dictionary in the type, and update that dictionary whenever a change is made to a superclass? That's essentially how __slotted__ attribute changes on base classes work now, isn't it? Why do we need to mess around with the dictionary entries themselves in order to do that? _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com