Serhiy Storchaka <[email protected]> added the comment:
Thank you for your PR Mark.
The main difference between PR 5883 and PR 5112 is that in PR 5883 the pair of
old WITH_CLEANUP_FINISH and END_FINALLY are replaced with a single new
WITH_CLEANUP_FINISH, and in PR 5112 it is replaced with a sequence of 7 opcodes
including a new opcode RERAISE.
POP_JUMP_IF_TRUE L
RERAISE
L:
POP_TOP
POP_TOP
POP_TOP
POP_EXCEPT
POP_TOP
This doesn't affect a performance in normal case because this code is executed
only when an exception has been raised (an in that case the performance is less
important). And seems this doesn't introduce new race conditions.
The number of opcodes is the same in both PRs. The implementation of RERAISE in
ceval.c in PR 5112 is a tiny bit simpler than the implementation of
WITH_CLEANUP_FINISH in PR 5883. But the generated bytecode and the compiler are
a tiny bit simpler in PR 5883. If RERAISE be used for other purposes besides
implementing a "with" statement, it would be a great advantage.
For now both approaches look to me not having significant advantages or
disadvantages against the other one. Does anybody have preferences?
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue32949>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com