[Python-ideas] Fast global cacheless lookup
Neil Toronto
ntoronto at cs.byu.edu
Thu Nov 22 17:42:14 CET 2007
Guido van Rossum wrote:
> Cool! Are you willing to show the code yet (bugs and all)?
Sure! I stayed up all night doing it and today is Thanksgiving, so I'll
probably not get to it for a little while. (I know making a patch
shouldn't take long, but I've never done it before.) Should I post the
patch here or somewhere else?
> Some questions:
>
> - what's the space & time impact for a dict with no watchers?
I think it's almost negligible.
Space: There are four bytes extra on every dict for a pointer to the
observer list. It may actually be zero or eight or more depending on
alignment and malloc block size - I haven't looked.
Time: On dicts with no observers, dealloc, delitem, pop, popitem, clear,
and resize pass through an "if (mp->ma_entryobs_list != NULL)".
PyDict_New sets mp->ma_entryobs_list to NULL. Nothing else is affected.
> - does this do anything for builtins?
It does right now well enough to get them quickly, but setting or
deleting them elsewhere won't show up yet in the frame. And it doesn't
handle the case where __builtins__ is replaced. That'll take a little
doing, but just mentally - it shouldn't affect performance much.
Anyway, that part will work properly when I'm done.
> - could this be made to work for instance variables?
If my brain were thinking in straight lines, maybe I'd come up with
something. :) I've got this fuzzy idea that it just might work. The hard
part may be distinguishing LOAD_ATTR applied to self from LOAD_ATTR
applied to something else. Hmm...
Something to digest while I'm digesting the Real Other White Meat. :)
> - what about exec(src, ns) where ns is a mapping but not a dict?
Good question - I don't know, but I think it should work, at least as
well as it did before. If there's no observer attached to a frame, it'll
default to its previous behavior. Another hmm...
Thanks for the prompt reply.
Neil
P.S. By the way, I'm very pleased with how clean and workable the
codebase is. I actually cheered at the lack of warnings. My wife
probably thinks I'm nuts. :D
More information about the Python-ideas
mailing list