[Python-Dev] Do more at compile time; less at runtime
MRAB
python at mrabarnett.plus.com
Mon Dec 10 00:29:16 CET 2012
More information about the Python-Dev mailing list
Mon Dec 10 00:29:16 CET 2012
- Previous message: [Python-Dev] Do more at compile time; less at runtime
- Next message: [Python-Dev] Do more at compile time; less at runtime
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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... > > PUSH_BLOCK try > part1 > if not X goto endif > push X > POP_BLOCK > part3 <<< duplicated > RETURN_VALUE > endif: > part2 > POP_BLOCK > 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.)
- Previous message: [Python-Dev] Do more at compile time; less at runtime
- Next message: [Python-Dev] Do more at compile time; less at runtime
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list