[Python-Dev] Possible optimization for LOAD_FAST ?

Terry Reedy tjreedy at udel.edu
Mon Jan 3 06:36:24 CET 2011


On 1/2/2011 10:18 PM, Guido van Rossum wrote:

> My proposed way out of this conundrum has been to change the language
> semantics slightly so that global names which (a) coincide with a
> builtin, and (b) have no explicit assignment to them in the current
> module, would be fair game for such optimizations, with the
> understanding that the presence of e.g. "len = len" anywhere in the
> module (even in dead code!) would be sufficient to disable the
> optimization.

I believe this amounts to saying

1) Python code executes in three scopes (rather than two): global 
builtin, modular (misleadingly call global), and local. This much is a 
possible viewpoint today.

2) A name that is not an assignment target anywhere -- and that matches 
a builtin name -- is treated as a builtin. This is the new part, and it 
amounts to a rule for entire modules that is much like the current rule 
for separating local and global names within a function. The difference 
from the global/local rule would be that unassigned non-builtin names 
would be left to runtime resolution in globals.

It would seem that this new rule would simplify the lookup of module 
('global') names since if xxx in not in globals, there is no need to 
look in builtins. This is assuming that following 'len=len' with 'del 
len' cannot 'unmodularize' the name.

For the rule to work 'retroactively' within a module as it does within 
functions would require a similar preliminary pass. So it could not work 
interactively. Should batch mode main modules work the same as when 
imported?

Interactive mode could work as it does at present or with slight 
modification, which would be that builtin names within functions, if not 
yet overriden, also get resolved when the function is compiled.

-- 
Terry Jan Reedy



More information about the Python-Dev mailing list