plataforma - ¿Por qué no se incluyó PyPy en Python estándar?
que es jython (6)
Además de todo lo que se ha dicho aquí, PyPy no es tan sólida 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 nightlies.
Por otro lado, solo hemos encontrado un error en CPython, y eso fue en una presentación preliminar.
Además, no descartes la falta de compatibilidad con Python 3. Nadie en la comunidad principal de Python se preocupa por Python 2 nunca más. Están trabajando en las siguientes grandes cosas en Python 3.4, que será el quinto lanzamiento importante de Python 3. Los chicos PyPy todavía no han conseguido uno de ellos. Así que tienen algo de retraso para hacer antes de que puedan comenzar a ser contendientes.
No me malinterpretes PyPy es increíble. 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). Ver https://bitbucket.org/pypy/pypy/issues/1447/ .
Estaba viendo PyPy y me preguntaba por qué no se ha adoptado en las distribuciones de Python principales. ¿No sería mejor que la compilación de JIT y la menor huella de memoria mejoren las velocidades de todos los códigos Python?
En resumen, ¿cuáles son los principales inconvenientes de PyPy que hacen que siga siendo un proyecto separado?
Mira este video de Guido van Rossum . Habla sobre la misma pregunta que hiciste a los 12 minutos y 33 segundos.
Reflejos:
- falta de compatibilidad con Python 3
- falta de soporte de extensión
- no es apropiado como código de pegamento
- la velocidad no es todo
Después de todo, él es quien decide ...
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 PyPy proporciona se genera utilizando un marco que han creado, que es extremadamente bueno, pero también completamente diferente con la implementación de CPython existente. Tendría que ser un reemplazo completo.
Hay algunas diferencias muy concretas entre PyPy y CPython, una gran cuestión es cómo se admiten los módulos de extensión , que, si quieres 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.
PyPy no es una bifurcación de CPython, por lo que nunca podría fusionarse directamente en CPython.
Teóricamente, la comunidad de Python podría adoptar universalmente PyPy, PyPy podría convertirse en la implementación de referencia y CPython podría suspenderse. Sin embargo, PyPy tiene sus propias debilidades:
- CPython es fácil de integrar con los módulos de Python escritos en C, que tradicionalmente es la forma en que las aplicaciones de Python han manejado las tareas intensivas de la CPU (véase, por ejemplo, el proyecto SciPy).
- El paso de compilación de PyPy JIT cuesta tiempo de CPU, es solo mediante la ejecución repetida del código compilado que se vuelve más rápido en general. Esto significa que los tiempos de inicio pueden ser más altos y, por lo tanto, PyPy no es necesariamente tan eficiente para ejecutar código de cola o scripts triviales.
- El comportamiento de PyPy y CPython no es idéntico en todos los aspectos, especialmente cuando se trata de "detalles de implementación" (comportamiento que no está especificado por el idioma pero que sigue siendo importante a nivel práctico).
- CPython se ejecuta en más arquitecturas que PyPy y se ha adaptado con éxito para ejecutarse en arquitecturas integradas de maneras que pueden ser poco prácticas para PyPy.
- El esquema de conteo de referencia de CPython para la administración de la memoria posiblemente tenga impactos de rendimiento más predecibles que los diversos sistemas de GC de PyPy, aunque esto no es necesariamente cierto para todas las estrategias de "GC puro".
- PyPy aún no es totalmente compatible con Python 3.x, aunque es un elemento de trabajo activo.
PyPy es un gran proyecto, pero la velocidad del 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 las plantillas sean más rápidas, 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 se encuentre el cuello de botella en una aplicación determinada.
Otro ejemplo: piensas 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 inestabilidad notable. Para CPython, la mayoría del material de juego con uso intensivo de la CPU se descarga a la biblioteca PyGame, que PyPy no puede aprovechar, ya que PyGame se implementa principalmente como una extensión C (aunque vea: pygame-cffi). Sigo pensando que PyPy puede ser una gran plataforma para juegos, pero nunca lo he visto realmente usado.
PyPy y CPython tienen enfoques radicalmente diferentes a las preguntas fundamentales de diseño y hacen diferentes intercambios, por lo que ninguno es "mejor" que el otro en todos los casos.
Recomiendo ver este discurso de David Beazley para obtener más información. Responde a tu pregunta dando claridad sobre la naturaleza y las complejidades de PyPy.
Una razón podría ser que según el sitio 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 tan "independientes de la plataforma" como sea posible.