Estaba mirando PyPy y me preguntaba por qué no se ha adoptado en las distribuciones principales de Python. ¿Acaso cosas como la compilación JIT y la huella de memoria baja no mejorarían en gran medida las velocidades de todo el código Python?
En resumen, ¿cuáles son los principales inconvenientes de PyPy que hacen que siga siendo un proyecto separado?
Respuestas:
PyPy no es una bifurcación de CPython, por lo que nunca podría fusionarse directamente en CPython.
Teóricamente, la comunidad Python podría adoptar universalmente PyPy, PyPy podría convertirse en la implementación de referencia y CPython podría descontinuarse. Sin embargo, PyPy tiene sus propias debilidades:
PyPy es un gran proyecto, pero la velocidad de tiempo de ejecución en tareas intensivas en CPU no lo es todo, y en muchas aplicaciones es la menor de muchas preocupaciones. Por ejemplo, Django puede ejecutarse en PyPy y eso hace que la creación de plantillas sea más rápida, pero los controladores de la base de datos de CPython son más rápidos que los de PyPy; al final, qué implementación es más eficiente depende de dónde esté el cuello de botella en una aplicación determinada.
Otro ejemplo: pensarías que PyPy sería genial para los juegos, pero la mayoría de las estrategias de GC como las que se usan en PyPy causan una inquietud notable. Para CPython, la mayoría de los juegos intensivos en CPU se descargan en la biblioteca PyGame, que PyPy no puede aprovechar ya que PyGame se implementa principalmente como una extensión C (aunque vea: pygame-cffi). Todavía creo que PyPy puede ser una gran plataforma para juegos, pero nunca lo he visto realmente utilizado.
PyPy y CPython tienen enfoques radicalmente diferentes a las preguntas fundamentales de diseño y realizan diferentes compensaciones, por lo que ninguno es "mejor" que el otro en todos los casos.
fuente
Por un lado, no es 100% compatible con Python 2.x, y solo tiene soporte preliminar para 3.x.
Tampoco es algo que pueda fusionarse: la implementación de Python que proporciona PyPy se genera utilizando un marco que han creado, que es extremadamente genial, pero también completamente disparejo con la implementación de CPython existente. Tendría que ser un reemplazo completo.
Hay algunas diferencias muy concretas entre PyPy y CPython, una importante es la forma en que se admiten los módulos de extensión , lo que, si desea ir más allá de la biblioteca estándar, es un gran problema.
También vale la pena señalar que PyPy no es universalmente más rápido.
fuente
Vea este video de Guido van Rossum . Él habla sobre la misma pregunta que usted hizo a los 12 minutos y 33 segundos.
Destacar:
Después de todo, él es el que decide ...
fuente
Una razón podría ser que, según el sitio de PyPy , actualmente solo se ejecuta en la arquitectura Intel x86 de 32 y 64 bits, mientras que CPython también se ejecuta en otras plataformas. Esto probablemente se deba a las mejoras de velocidad específicas de la plataforma en PyPy. Si bien la velocidad es algo bueno, las personas a menudo quieren que las implementaciones de lenguaje sean lo más "independientes de la plataforma" posible.
fuente
Recomiendo ver esta nota clave de David Beazley para obtener más información. Responde a su pregunta dando claridad sobre la naturaleza y las complejidades de PyPy.
fuente
Además de todo lo que se ha dicho aquí, PyPy no es tan sólido como CPython en términos de errores. Con SymPy, hemos encontrado alrededor de una docena de errores en PyPy en los últimos años, tanto en versiones lanzadas como en los nightlies.
Por otro lado, solo hemos encontrado un error en CPython, y eso fue en una versión preliminar.
Además, no descarte la falta de compatibilidad con Python 3. Ya nadie en la comunidad central de Python se preocupa por Python 2. Están trabajando en las próximas grandes cosas en Python 3.4, que será la quinta versión principal de Python 3. Los chicos de PyPy todavía no han recibido una de ellas. Entonces tienen que ponerse al día antes de que puedan comenzar a ser contendientes.
No me malinterpretes. PyPy es asombroso. Pero aún está lejos de ser mejor que CPython en muchas formas muy importantes.
Y, por cierto, si usa SymPy en PyPy, no verá una huella de memoria más pequeña (o una aceleración tampoco). Ver https://bitbucket.org/pypy/pypy/issues/1447/ .
fuente