[Python-Dev] Optimization of Python ASTs: How should we deal with constant values?

Steve Holden steve at holdenweb.com
Fri May 9 03:12:57 CEST 2008


Thomas Lee wrote:
> Adam Olsen wrote:
>> On Thu, May 8, 2008 at 5:22 PM, Thomas Lee <tom at vector-seven.com> wrote:
>>  
>>> Nick Coghlan wrote:
>>>    
>>>> There are a lot of micro-optimisations that are actually context
>>>> independent, so moving them before the symtable pass should be quite
>>>> feasible - e.g. replacing "return None" with "return", stripping 
>>>> dead code
>>>> after a return statement, changing a "if not" statement into an "if"
>>>> statement with the two suites reversed, changing "(1, 2, 3)" into a 
>>>> stored
>>>> constant, folding "1 + 2" into the constant "3".
>>>>
>>>> I believe the goal is to see how many of the current bytecode
>>>> optimisations can actually be brought forward to the AST generation 
>>>> stage,
>>>> rather than waiting until after the bytecode symtable calculation and
>>>> compilation passes.
>>>>
>>>>       
>>> That's been the aim so far. It's been largely successful with the 
>>> exception
>>> of a few edge cases (most notably the functions vs. generator stuff). 
>>> The
>>> elimination of unreachable paths (whether they be things like "if 0: 
>>> ..." or
>>> "return; ... more code ...") completely breaks generators since we might
>>> potentially be blowing away "yield" statements during the elimination
>>> process.
>>>     
>>
>> Also breaks various sanity checks relating to the global statement.
>>
>>   
> What sanity checks are these exactly? Is this related to the lnotab?
> 
> Cheers,
> T
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: 
> http://mail.python.org/mailman/options/python-dev/python-python-dev%40m.gmane.org 
> 
> 
While not strictly related to the global statement, perhaps Adam refers 
to the possibility of optimizing away code with an assignment which 
would make a name be recognized as local? If you're worried about 
"yield" disappearing you should also be worried about assignments 
disappearing, since that might cause names to be interpreted as globals.

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/



More information about the Python-Dev mailing list