[Python-Dev] Do more at compile time; less at runtime (original) (raw)

MRAB python at mrabarnett.plus.com
Mon Dec 10 00:29:16 CET 2012


On 2012-12-09 22:22, Mark Shannon wrote:

Hi all,

The current CPython bytecode interpreter is rather more complex than it needs to be. A number of bytecodes could be eliminated and a few more simplified by moving the work involved in handling compound statements (loops, try-blocks, etc) from the interpreter to the compiler. This simplest example of this is the while loop... while cond: body This currently compiled as start: if not cond goto end body goto start end: but it could be compiled as goto test: start: body if cond goto start which eliminates one instruction per iteration. A more complex example is a return in a try-finally block. try: part1 if cond: return X part2 finally: part3 Currently, handling the return is complex and involves "pseudo exceptions", but if part3 were duplicated by the compiler, then the RETURN bytecode could just perform a simple return. The code above would be compiled thus... PUSHBLOCK try part1 if not X goto endif push X POPBLOCK part3 <<< duplicated RETURNVALUE endif: part2 POPBLOCK part3 <<< duplicated The changes I am proposing are: [snip] Is it necessary to duplicate part3? Is it possible to put it into a subroutine if it's long? (And I do mean a simple cheap subroutine.)



More information about the Python-Dev mailing list