[Python-Dev] Fast access to builtins (original) (raw)

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