[pypy-dev] python 2 and python 3 sharing an interpreter?

Martijn Faassen faassen at startifact.com
Thu Dec 8 11:16:28 CET 2011


Hi PyPy folks,

I've said so before in comments on your blog, but much kudos to the 
project, you guys have been doing a great job! Some time ago I tried 
PyPy against an artificial life experiment of mine which implemented a 
simple stack-based language in Python and was pleasantly surprised to 
see that PyPy actually sped things up quite a bit - I'd heard about the 
JIT not being too good with interpreters. Good enough to make it a lot 
faster, though. :)

Anyway, on to my question. I already asked it once in 2007, and didn't 
get a very encouraging response, but we're years down the road now and 
crazy difficulties is something the PyPy folks are good at, so I'll ask 
it again.

You all are, as I understand, exploring supporting Python 3 with PyPy. 
Cool.

Would it be possible to have an interpreter that could support both 
Python 2 and Python 3 modules in the same runtime? I.e, an interpreter 
that supports importing Python 3 code from Python 2 modules, and vice versa?

It would tremendously help the Python ecosystem for such a solution to 
be out there, because in such a situation people can start using Python 
3 codebases in Python 2, encouraging more people to port their libraries 
to Python 3, and people can use Python 2 codebases in Python 3, 
encouraging more people to start projects in Python 3. I can't stress 
enough how much I believe that would help the Python ecosystem!

I understand that the problems involved would be decidedly non-trivial, 
but that has never stopped you guys before.

Modules would need to declare somehow that they were Python 2 or Python 
3. There'd need to be, somehow, two separate import "spaces", where 
Python 2 code would import from Python 2 modules by default and Python 3 
code would import from Python 3 modules by default. You'd also need 
something explicit to allow cross imports. Python 2 objects represented 
in Python 3 (and vice versa) would either need to be transformed for 
immutable built-in objects (a Python 2 string would become a Python 3 
bytes), or proxied for custom objects.

I remember when I brought this up at the time that Armin Rigo suggested 
a few conundrums that were hard to solve. What these were exactly I 
don't remember anymore, so I hope Armin will chime in and remind me. :)

Regards,

Martijn





More information about the pypy-dev mailing list