Python es un lenguaje de programación de gran (y creciente) popularidad, gracias entre otras cosas a su papel preponderante en ámbitos como la ciencia de datos o la inteligencia artificial. Pero, habiendo sido la facilidad de codificación uno de sus objetivos fundacionales, la velocidad es algo que se ha dejado de lado a lo largo de su desarrollo.
De hecho, lenguajes de bajo nivel como el histórico C producen código capaz de ejecutarse hasta 100 veces más rápido, dependiendo de la tarea en cuestión. A mayor número de subprocesos, claro, la brecha de rendimiento se hace más y más visible. A causa de ello, la propia Microsoft decidió financiar el año pasado un proyecto para lograr duplicar la velocidad de Python en próximas versiones.
La nueva beta acaba de saltar al campo, y se nota que está fresca y lista para correr
El mes pasado, Internet tuvo acceso al primer vistazo (la Beta 1, concretamente) de lo que será Python 3.11. Más allá de una serie de mejoras y añadidos, lo que más está llamando la atención de esta nueva versión son los datos de rendimiento que ha publicado sobre la misma la Python Software Foundation.
Las pruebas, que se han realizado ejecutando en Ubuntu Linux software escrito en Python y compilado con el compilador GCC, arroja unos resultados que hacen gala de una velocidad hasta un 60% en algunos casos (un 25% de media) superior a Python 3.10, sin necesidad de realizar cambio alguno en el código.
En Phoronix han recurrido a la aplicación de benchmarking Pybench —una colección de 31 test que evalúan diferentes aspectos del lenguaje Python (p. ej. operaciones aritméticas, llamadas a métodos, acceso a atributo…)— para comprobar o desmentir las afirmaciones de los desarrolladores. Y los resultados son contundentes:
¿Qué ha cambiado?
Este logro ha sido posible, entre otras cosas, sin necesidad de alterar el consumo de memoria de Python 3.11, que ha permanecido sin cambios hasta ahora. De hecho, los cambios ha venido de dos áreas, fundamentalmente, según explican los desarrolladores de Python en su documentación:
La velocidad de inicio: "En Python 3.11, los módulos principales esenciales para el inicio de Python están "congelados". Esto significa que sus objetos de código son asignados estáticamente por el intérprete"
Aceleración del tiempo de ejecución: "Los marcos de Python se crean cada vez que Python llama a una función de Python. Se ha optimizado la estructura del marco interno para que contenga solo información esencial. Anteriormente, contenían información adicional de depuración y administración de memoria".
Relacionado con esto último, ha cambiado un aspecto básico del funcionamiento de Python: si antes toda llamada a una función Python llamaba, a su vez, a una función C que la interpretase, ahora cuando CPython detecta una función Python llamando a otra función de Python, configura un nuevo marco y "salta" al nuevo código dentro del mismo, lo que evita llamar a la función de interpretación de C.