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.)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com