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

M.-A. Lemburg mal@lemburg.com
Thu, 27 Mar 2003 23:24:50 +0100


Raymond Hettinger wrote:

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: LOADGLOBAL 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: LOADCONST 5 (<type 'range'>)

Using the -O for this is not a working possibility. -OO is reserved for optimizations which can change semantics, but even there, I'd rather like a per-module switch than a command line switch.

BTW, why not have a new opcode for symbols in the builtins and then only tweak the opcode implementation instead of having the compiler generate different code ?

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 PyCodeNew(). Raymond Hettinger


Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev

-- Marc-Andre Lemburg eGenix.com

Professional Python Software directly from the Source (#1, Mar 27 2003)

Python/Zope Products & Consulting ... http://www.egenix.com/ mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/


Python UK 2003, Oxford: 5 days left EuroPython 2003, Charleroi, Belgium: 89 days left