[Python-Dev] Fast access to __builtins__
Raymond Hettinger
Raymond Hettinger" <python@rcn.com
Thu, 27 Mar 2003 16:37:59 -0500
>From past rumblings, I gather that Python is moving
towards preventing __builtins__ from being shadowed.
I would like to know what you guys think about going ahead
with that idea whenever the -O optimization flag is set.
The idea is to scan the code for lines like:
LOAD_GLOBAL 2 (range)
and, if the name is found in __builtins__, then lookup
the name, add the reference to the constants table and,
replace the code with something like:
LOAD_CONST 5 (<type 'range'>)
The opcode replacement bypasses module level shadowing
but leaves local shadowing intact. For example:
modglob = 1
range = xrange
def f(list):
for i in list: # local shadowing of 'list' is unaffected
print ord(i) # access to 'ord' is optimized
j = modglob # non-shadowed globals are unaffected
k = range(j) # shadowing of globals is ignored
I've already tried out a pure python proof-of-concept and it is
straightforward to recode it in C and attach it to PyCode_New().
Raymond Hettinger