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

> On Sun, Jan 2, 2011 at 5:50 PM, Alex Gaynor <alex.gay...@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.

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to