¿Por qué se prefiere PyPy3 a Python3?

«Si desea que su código se ejecute más rápido, probablemente debería usar PyPy». 
— Guido van Rossum (creador de Python) 
  
Si alguna vez ha codificado en Python, sabe lo lento que es en comparación con otros lenguajes de programación populares. En la mayoría de los jueces de código en línea, el límite de tiempo de Python es 5 veces mayor que el de C y más del doble que el de Java. 

La razón por la que Python suele tardar entre 10 y 100 veces más en ejecutarse es que es un lenguaje de nivel superior que se escribe dinámicamente. No importa qué tan optimizado esté su código, no puede superar a C/C++ en tiempo de ejecución tal como está. Sin embargo, Python es un lenguaje divertido y fácil de usar, por lo que los programas se crean mucho más rápido con él. 

Para resolver este problema, comprendamos qué es Python

Python no es un lenguaje único, sino que es una forma de implementar el código de Python. La implementación de Python predeterminada y más utilizada es CPython. El flujo de ejecución de código en CPython es:  

  1. El intérprete comprueba si hay errores de lógica y sintaxis.
  2. Después de no encontrar errores, el código formateado se convierte en código de bytes
  3. El código de bytes se envía a PVM (Python Virtual Machine), que convierte el código en un lenguaje legible por máquina en el que la CPU realiza operaciones.

Sin embargo, CPython no es la forma de implementar Python. De hecho, hay muchas otras implementaciones: 

  • IronPython (Python ejecutándose en .NET)
  • Jython (Python ejecutándose en la máquina virtual de Java)
  • PyPy (una implementación rápida de python con un compilador JIT)
  • Stackless Python (rama de CPython que admite micro subprocesos)
  • MicroPython (Python ejecutándose en microcontroladores)

PyPy está construido usando el lenguaje RPython que fue desarrollado conjuntamente con él. RPython (Python restringido) es un subconjunto del lenguaje Python que impone algunas restricciones al lenguaje Python para que se ejecute más rápido. La razón principal para usarlo en lugar de CPython es su velocidad. En concreto, suele correr 4,4 veces más rápido que CPython. PyPy implementa Python 2.7.13 y 3.6.9. Es compatible con todos los lenguajes principales, pasando el conjunto de pruebas de Python 2.7 y la mayor parte del conjunto de pruebas de 3.6 (con modificaciones menores) Es compatible con la mayoría de los módulos de biblioteca estándar de Python comúnmente utilizados. Esto significa que, en la mayoría de los casos, su código python se ejecutará sin necesidad de modificaciones. 

PyPy utiliza una técnica conocida como meta-tracing, que transforma un intérprete en un compilador JIT (justo a tiempo) de seguimiento, que es una forma de ejecutar código que involucra compilaciones durante el tiempo de ejecución. No solo se ejecuta más rápido, sino que también tiene un mejor uso de la memoria que Python. También es altamente compatible con algunas de las bibliotecas más utilizadas que se pueden usar en Python. 

Algunos de los cuales son:  

  • ctipos
  • Django
  • sqlalchemy
  • matraz
  • retorcido
  • pilones
  • lo nuevo de divmod
  • cochinillo
  • Pillow
  • lxml
  • NumPy

Con tantas ventajas, seguramente también tendrá algunas desventajas.  

Desventajas de PyPy

PyPy no puede ejecutar todo el código Python. Algunas modificaciones pueden ser necesarias para que el código de Python se ejecute. La C-API externa se ha vuelto a implementar en PyPy, pero a veces algunas abstracciones de C se filtran en CPython y se abusan de ellas, tal vez incluso sin saberlo. Requiere un tiempo de «calentamiento» que provoca un retraso leve a notable en la ejecución inicial de una aplicación, debido al tiempo necesario para cargar y compilar el código de bytes. Cuanto menor sea la ejecución peor será su rendimiento. 

Publicación traducida automáticamente

Artículo escrito por aadityamayankar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *