Re: Patch: Update RuleDispatch for python-2.7
"P.J. Eby" <pje-Wh6+Hckhi6HFNGf7iClzIwC/[email protected]> Mon, 02 Aug 2010 04:11:16 -0400
| Newsgroups | gmane.comp.python.peak |
|---|---|
| Message-ID | <[email protected]> |
At 02:33 AM 8/2/2010 -0400, P.J. Eby wrote: >Hm. I suppose I could always implement the old opcodes as a macro >that sticks in a DUP_TOP and then uses the unconditional POP >forms... That would be evil, performance-wise on 2.7, but it'd make >those weird cases easier and transparently support old >code. Hm... I actually kinda like that. Anybody else using >BytecodeAssembler will then get 2.7-compatibility for free, at the >expense of a little slowdown on conditional jumps; if they want the >performance, they can upgrade to one of the newer opcodes (and still >have it work with older Pythons). This approach seems to have worked; the svn versions of BytecodeAssembler and PEAK-Rules now have only shallow test failures on 2.7, i.e. ones that are caused by differences in 2.7's hashing of dictionaries (and therefore the repr's used in tests), or in the assembly listings that results from emulating older opcodes. To fix these failures, I'll have to do some additional work, and even more to actually properly clean things up and document them, but at least it appears feasible. Two more opcode changes in 2.7 that I found along the way: * LIST_APPEND now takes an argument to point to the list on the stack, so it doesn't need a temporary variable (I hacked around this for now, but it should be done more cleanly) * SETUP_WITH is a new opcode that's not properly supported So, what I've done for now is release an 0.5.2 "compatibility release" of BytecodeAssembler with just the quick workarounds, then later I'll release an 0.6 with a more "symbolic" disassembler that can handle the emulations transparently for testing purposes. (And with support for SETUP_WITH and some improved LIST_APPEND handling.) Meanwhile, PEAK-Rules's svn version now appears to have only cosmetic test failures on 2.7, when used with BytecodeAssembler 0.5.2. It's not perfect by any means, but then, it looks like most of those shallow failures were happening with 2.6 anyway. ;-) Please let me know whether this is sufficient for you to be able to offer PEAK-Rules on 2.7 for now.