[Python-Dev] Possible optimization for LOAD_FAST ?

Glyph Lefkowitz glyph at twistedmatrix.com
Mon Jan 3 15:12:12 CET 2011

On Jan 2, 2011, at 10:18 PM, Guido van Rossum wrote:

> On Sun, Jan 2, 2011 at 5:50 PM, Alex Gaynor <alex.gaynor at gmail.com> wrote:
>> No, it's singularly impossible to prove that any global load will be any given
>> value at compile time.  Any optimization based on this premise is wrong.
> True.
> 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.
> But barring someone interested in implementing something based on this
> rule, the proposal has languished for many years.

Wouldn't this optimization break things like mocking out 'open' for testing via 'module.open = fakeopen'?  I confess I haven't ever wanted to change 'len' but that one seems pretty useful.

If CPython wants such optimizations, it should do what PyPy and its ilk do, which is to notice the assignment, but recompile code in that module to disable the fast path at runtime, preserving the existing semantics.

More information about the Python-Dev mailing list