This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
| Author | kaizhu |
|---|---|
| Recipients | collinwinter, kaizhu |
| Date | 2008年06月29日.20:06:56 |
| SpamBayes Score | 6.493192e-05 |
| Marked as misclassified | No |
| Message-id | <1214770027.24.0.542856927114.issue3238@psf.upfronthosting.co.za> |
| In-reply-to |
| Content | |
|---|---|
this patch touches only Python/ceval.c. 1. the only existing thing it modifies is PyEval_EvalFrameEx (adds 7 extra cases for the new 3.0 opcodes, doesn't mess w/ any of the existing ones, or anything else as a matter of fact) 2. that, plus it defines (the new opcodes) #define SET_ADD 17 #define STORE_LOCALS 69 #define LOAD_BUILD_CLASS 34 // 71 in py3k #define MAKE_BYTES 35 // unused in py3k #define POP_EXCEPT 36 // 89 in py3k #define UNPACK_EX 94 #define BUILD_SET 109 // 104 in py3k and some backported vars & helper functions only 2 contiguous areas of ceval.c is patched (1. & 2. - areas are delimited by the comments '// py3k') this simple patch seems sufficient in theory to allow the interpreter to natively execute most of 3.0's language syntax (nonlocal, print, extended unpacking, ... have been tested to work) *the one exception being pep3102 - keyword-only arguments i wrote 2 small scripts which gives an interactive function 'compile_py3k' similar to __builtin__.compile. its a wrapper function which queries the byte-compiling task to a python 3.0 server via pipe io. example demonstrating pep3132 extended unpacking syntax: a,b,*c = 1,2,3,4 (note the backported 3.0 opcode used in line2 of the disassembly) Python 2.5.2 (r252:60911, Jun 27 2008, 21:19:51) [GCC 3.4.6 20060404 (Red Hat 3.4.6-9)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import py3to2 py3to2 server restarting with io: (4, 5) py3to2 server: Python 3.0b1 (r30b1:64395, Jun 24 2008, 21:53:55) py3to2 server: [GCC 3.4.6 20060404 (Red Hat 3.4.6-9)] on linux2 py3to2 server: Type "help", "copyright", "credits" or "license" for more information. py3to2 server: >>> src = "a,b,*c = 1,2,3,4" >>> codeobject = py3to2.compile_py3k(src,"","exec") 1 0 LOAD_CONST 5 ((1, 2, 3, 4)) 3 UNPACK_EX_py3k 2 6 STORE_NAME 0 (a) 9 STORE_NAME 1 (b) 12 STORE_NAME 2 (c) 15 LOAD_CONST 4 (None) 18 RETURN_VALUE >>> exec(codeobject) >>> print a,b,c 1, 2, [3, 4] >>> u can go c http://pypi.python.org/pypi?name=py3to2&version=20080628&:action=display for more info on the script anyway, i think it would b a great boost for python 3.0 (which i think is very cool) if developers can test/develop it under the 2.x environment. this patch plus some scripts to emulated 3k extensions (bytes, bytearray, ...) can go a long way in making 3.0 available for the masses. ps. i've also attempted the reverse (forward-port 2.x opcodes to 3.0), & its a bit more complicated (namely the PRINTxxx opcodes). if there's significant interest in that, i could work on it a bit more, but my current interest is in extending 3.0 functionality to the vast 2.x software base. |
|
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2008年06月29日 20:07:07 | kaizhu | set | spambayes_score: 6.49319e-05 -> 6.493192e-05 recipients: + kaizhu, collinwinter |
| 2008年06月29日 20:07:07 | kaizhu | set | spambayes_score: 6.49319e-05 -> 6.49319e-05 messageid: <1214770027.24.0.542856927114.issue3238@psf.upfronthosting.co.za> |
| 2008年06月29日 20:07:05 | kaizhu | link | issue3238 messages |
| 2008年06月29日 20:07:01 | kaizhu | create | |