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

Martijn Faassen faassen at startifact.com
Thu Dec 8 20:07:35 CET 2011


Hey,

On 12/08/2011 11:35 AM, Alex Gaynor wrote:
> I don't think it can, or should be done, here's why:  Say you have a
> Python 2 dictionary {"a": 3}, and you pass this over to py3k land, what
> does it become?  Logically it becomes a {b"a": 3}, two problems: a) it
> now has bytes for keys, which means you can't use it as a **kwargs, b)
> internally ints have a totally different representation, since there's
> now only a unified long type (this one doesn't apply to pypy as much,
> just throwing it out there for completeness).  Python 2 fundamentally
> does the string type wrong, it's both the general string type for
> everythign, as well as the byte sequence, the result is no program has
> enough semantic knowledge to know what you mean by a string when you
> pass it over hte py3k boundary.

You could come up with a rule for that amended by some annotations. If 
you get a Python 2 string type, that'd be bytes in Python 3. Unless 
there's some form of annotation somewhere (handwave) that says otherwise 
to the proxying layer.

Many Python 2 APIs do unicode fairly well actually. There is still a 
problematic situation if the API returns a str type if the content is 
plain ascii: elementtree does this for instance, but no problem passing 
in unicode objects from Python 3. In that case I guess the only hope is 
some kind of annotation system. It'd be like a native language binding 
problem: the problem would probably be less big than usual given that 
the languages are very similar.

Regards,

Martijn



More information about the pypy-dev mailing list