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

Thomas Lee tom at vector-seven.com
Fri May 9 01:54:20 CEST 2008


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


More information about the Python-Dev mailing list