¿Por qué no debería usar PyPy en lugar de CPython si PyPy es 6,3 veces más rápido?
He escuchado mucho sobre el proyecto PyPy . Afirman que es 6,3 veces más rápido que el intérprete CPython de su sitio .
Siempre que hablamos de lenguajes dinámicos como Python, la velocidad es uno de los principales problemas. Para solucionar esto, dicen que PyPy es 6,3 veces más rápido.
El segundo problema es el paralelismo, el infame Global Interpreter Lock (GIL). Para esto, PyPy dice que puede proporcionar Python sin GIL .
Si PyPy puede resolver estos grandes desafíos, ¿cuáles son sus debilidades que impiden una adopción más amplia? Es decir, ¿qué impide que alguien como yo, un típico desarrollador de Python, cambie a PyPy en este momento ?
NOTA: PyPy está más maduro y tiene mejor soporte ahora que en 2013, cuando se hizo esta pregunta. Evite sacar conclusiones a partir de información desactualizada.
- PyPy, como otros se han apresurado a mencionar, tiene un soporte débil para extensiones C. Tiene soporte, pero generalmente a velocidades más lentas que las de Python y, en el mejor de los casos, es dudoso. Por lo tanto, muchos módulos simplemente requieren CPython. Verifique la lista de paquetes compatibles , pero observe la fecha en que se actualizó esa lista, porque no se mantiene al mismo ritmo que el soporte real, por lo que aún es posible que los paquetes marcados como no compatibles en esa lista sean realmente compatibles.
- La compatibilidad con Python generalmente se retrasa en algunas versiones , por lo que si es absolutamente necesario las funciones más recientes, es posible que deba esperar un tiempo antes de que PyPy las admita.
- A veces, PyPy no es realmente más rápido para los "scripts", para los cuales mucha gente usa Python. Estos son programas de corta duración que hacen algo simple y pequeño. Debido a que PyPy es un compilador JIT, sus principales ventajas provienen de tiempos de ejecución prolongados y tipos simples (como números). Las velocidades previas a JIT de PyPy pueden ser malas en comparación con CPython.
- Inercia . Pasar a PyPy a menudo requiere reequipamiento, lo que para algunas personas y organizaciones es simplemente demasiado trabajo.
Ésas son las principales razones que me afectan, diría yo.
Ese sitio no afirma que PyPy sea 6,3 veces más rápido que CPython. Citar:
El promedio geométrico de todos los puntos de referencia es 0,16 o 6,3 veces más rápido que CPython
Esta es una declaración muy diferente a la declaración general que hizo, y cuando comprenda la diferencia, comprenderá al menos un conjunto de razones por las que no puede simplemente decir "usar PyPy". Puede parecer que estoy siendo quisquilloso, pero es vital comprender por qué estas dos afirmaciones son totalmente diferentes.
Para desglosar eso:
La declaración que hacen sólo se aplica a los puntos de referencia que han utilizado. No dice absolutamente nada sobre su programa (a menos que su programa sea exactamente igual a uno de sus puntos de referencia).
La declaración se refiere a un promedio de un grupo de puntos de referencia. No se afirma que ejecutar PyPy proporcione una mejora de 6,3 veces incluso para los programas que han probado.
No se afirma que PyPy pueda ejecutar todos los programas que ejecuta CPython , y mucho menos más rápido.
Debido a que pypy no es 100% compatible, requiere 8 gigas de RAM para compilarse, es un objetivo móvil y altamente experimental, mientras que cpython es estable, el objetivo predeterminado para los creadores de módulos durante 2 décadas (incluidas las extensiones de c que no funcionan en pypy ), y ya está ampliamente implementado.
Es probable que Pypy nunca sea la implementación de referencia, pero es una buena herramienta.
La segunda pregunta es más fácil de responder: básicamente puedes usar PyPy como reemplazo directo si todo tu código es Python puro. Sin embargo, muchas bibliotecas ampliamente utilizadas (incluidas algunas de las bibliotecas estándar) están escritas en C y compiladas como extensiones de Python. Algunos de estos pueden funcionar con PyPy, otros no. PyPy proporciona la misma herramienta "orientada hacia adelante" que Python (es decir, es Python), pero sus entrañas son diferentes, por lo que las herramientas que interactúan con esas entrañas no funcionarán.
En cuanto a la primera pregunta, imagino que hay una especie de trampa con la primera: PyPy ha estado evolucionando rápidamente en un esfuerzo por mejorar la velocidad y mejorar la interoperabilidad con otros códigos. Esto lo ha hecho más experimental que oficial.
Creo que es posible que si PyPy llega a un estado estable, pueda comenzar a usarse más ampliamente. También creo que sería fantástico que Python se alejara de sus fundamentos en C. Pero eso no sucederá hasta dentro de un tiempo. PyPy aún no ha alcanzado la masa crítica en la que es casi lo suficientemente útil por sí solo como para hacer todo lo que uno quisiera, lo que motivaría a las personas a llenar los vacíos.