[Python-Dev] Optimization of Python ASTs: How should we deal with constant values?
Adam Olsen
rhamph at gmail.com
Fri May 9 01:36:14 CEST 2008
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.
--
Adam Olsen, aka Rhamphoryncus
More information about the Python-Dev
mailing list