6 intérpretes de python para probar en 2022

Ahora que estamos en la recta final del año 2022, creo que es una buena ocasión para recopilar información sobre los 6 intérpretes de python que han destacado en este año. Concretamente vamos a hablar de los programas CPython, Pyston, PyPy, RustPython, Stackless Python y Micro Python.

Antes de nada, indicar que esta entrada es una adaptación al castellano del artículo original «6 python interpreters to try in 2022» publicado originalmente en inglés en el portal opensource.com por el autor Stephan Avenwedde, publicado utilizando la licencia Creative Commons Attribution-Share-Alike 4.0

Créditos: Adaptación de WOCinTech Chat (Al final de la entrada enlace al origen)

6 intérpretes de python para probar en 2022

Podría ser interesante ver cómo se comporta su código en otro intérprete diferente al que está acostumbrado.

Python, uno de los lenguajes de programación más populares, requiere un intérprete para ejecutar las instrucciones definidas por el código de Python.  A diferencia de otros lenguajes, que se compilan directamente en código de máquina, depende del intérprete leer el código de Python y traducir sus instrucciones para que la CPU realice las acciones relacionadas. Hay varios intérpretes por ahí, y en este artículo, echaré un vistazo a algunos de ellos.

Cartilla de intérpretes

Cuando se habla del intérprete de Python, generalmente se hace referencia al binario /usr/bin/python. Eso te permite ejecutar un archivo .py.

Sin embargo, la interpretación es sólo una tarea. Antes de que una línea de código de Python se ejecute realmente en la CPU, se requieren estos cuatro pasos:

  • Lexing: el código fuente hecho por humanos se convierte en una secuencia de entidades lógicas, los llamados tokens léxicos.
  • Análisis: en el analizador, los tokens léxicos se verifican con respecto a la sintaxis y la gramática. La salida del analizador es un árbol de sintaxis abstracta (AST).
  • Compilación: en función del AST, el compilador crea el código de bytes de Python. El bytecode consta de instrucciones muy básicas independientes de la plataforma.
  • Interpretación: el intérprete toma el código de bytes y realiza las operaciones especificadas

Como puede ver, se requieren muchos pasos antes de tomar cualquier acción real. Tiene sentido echar un vistazo más de cerca a los diferentes intérpretes.

1. CPython

CPython es la implementación de referencia de Python y la predeterminada en muchos sistemas. Como sugiere el nombre, CPython está escrito en C.

Como resultado, es posible escribir extensiones en C y, por lo tanto, hacer que el código de biblioteca basado en C utilizado por Widley esté disponible para Python. CPython está disponible en una amplia gama de plataformas, incluidas ARM, iOS y RISC. Sin embargo, como implementación de referencia del lenguaje, CPython está cuidadosamente optimizado y no se centra en la velocidad.

2. Pyston

Pyston es una bifurcación del intérprete CPython que implementa optimizaciones de rendimiento. El proyecto se describe a sí mismo como un reemplazo del intérprete estándar de CPython para grandes aplicaciones del mundo real con un potencial de aceleración de hasta el 30 %. Debido a la falta de paquetes binarios compatibles, los paquetes de Pyston deben volver a compilarse durante el proceso de descarga.

3. PyPy

PyPy es un compilador que utiliza la «Compilación en tiempo de ejecución» para Python que está escrito en RPython, un subconjunto de Python tipificado estáticamente. A diferencia del intérprete de CPython, PyPy compila en código de máquina que la CPU puede ejecutar directamente. PyPy es el patio de recreo para los desarrolladores de Python donde pueden experimentar con nuevas funciones más fácilmente.

PyPy es más rápido que la implementación de referencia de CPython. Debido a la naturaleza del compilador JIT, solo las aplicaciones que se han estado ejecutando durante mucho tiempo se benefician del almacenamiento en caché. PyPy puede actuar como reemplazo de CPython. Sin embargo, hay un inconveniente. La mayoría de los módulos de extensión C son compatibles, pero se ejecutan más lentamente que uno de Python. Los módulos de extensión PyPy están escritos en Python (no C) y, por lo tanto, el compilador JIT puede optimizarlos. Mientras su aplicación no dependa de módulos incompatibles, PyPy es un excelente reemplazo para CPython. Hay una página dedicada en el sitio web del proyecto que describe las diferencias con CPython en detalle: Diferencias entre PyPy y CPython4.

4. RustPython

Como sugiere el nombre, RustPython es un intérprete de Python escrito en Rust. Aunque el lenguaje de programación Rust es bastante nuevo, ha ido ganando popularidad y es candidato a ser el sucesor de C y C++. Por defecto, RustPython se comporta como el intérprete de CPython pero también tiene un compilador JIT que se puede habilitar opcionalmente. Otra buena característica es que la cadena de herramientas de Rust le permite compilar directamente en WebAssembly y también le permite ejecutar el intérprete completamente en el navegador. Se puede encontrar una demostración en rustpython.github.com/demo.

5. StacklessPython

Stackless Python se describe a sí mismo como una versión mejorada del lenguaje de programación Python. El proyecto es básicamente una bifurcación del intérprete CPython que agrega microhilos, canales y un programador al lenguaje. Los microhilos le permiten estructurar su código en tasklets que le permiten ejecutar su código en paralelo. Este enfoque es comparable al uso de subprocesos verdes del módulo greenlet. Los canales se pueden utilizar para la comunicación bidireccional entre tasklets. Un usuario famoso de Stackless Python es el MMORPG Eve Online.

6. Micro Python

MicroPython es el camino a seguir si apunta a microcontroladores. Es una implementación sencilla que solo requiere 16kB de RAM y 256kB de espacio. Debido al entorno integrado al que está destinada, la biblioteca estándar de MicroPython es solo un subconjunto de la extensa STL de CPython. Para desarrollar y probar o como una alternativa liviana, MicroPython también se ejecuta en máquinas x86 y x64 ordinarias. MicroPython está disponible para Linux, Windows y muchos microcontroladores.

Performance

Por diseño, Python es un lenguaje intrínsecamente lento. Dependiendo de la tarea, existen diferencias de desempeño significativas entre los intérpretes. Para obtener una descripción general de qué intérprete es la mejor elección para una determinada tarea, consulte pybenchmarks.org. Una alternativa al uso de un intérprete es compilar el código binario de Python directamente en el código de la máquina. Nuitka, por ejemplo, es uno de esos proyectos que pueden compilar código Python a código C y de C a código máquina. Luego, el código C se compila en código de máquina utilizando un compilador de C ordinario. El tema de los compiladores de Python es bastante completo y merece un artículo aparte.

Resumen

Python es un lenguaje maravilloso para la creación rápida de prototipos y la automatización de tareas. Además, es fácil de aprender y muy adecuado para principiantes. Si suele quedarse con CPython, podría ser interesante ver cómo se comporta su código en otro intérprete. Si usa Fedora, puede probar fácilmente algunos otros intérpretes ya que el administrador de paquetes ya proporciona los archivos binarios correctos. Consulte fedora.developer.org para obtener más información.

Fuente de la imagen: Flickr