[Python-Dev] Do more at compile time; less at runtime

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...
>> 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.)


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /