Optimizar Python no es algo sencillo debido a su dinamismo. Aun así, hacer que Python sea más rápido es una de las mejores opciones para el futuro del lenguaje.
¿Por qué Python es lento?
Es cierto, Python no es conocido por su velocidad.
Cuando lo comparamos con lenguajes como C, C++, Java, Rust, o Go, Python se queda atrás en términos de rendimiento, especialmente en tareas que requieren mucha computación o manipulación de objetos.
A lo largo del tiempo, los usuarios de Python han buscado soluciones externas como NumPy, Numba o Cython para mejorar el rendimiento.
Estas bibliotecas hacen el trabajo, pero conllevan un costo, ya sea en términos de abstracción, limitación del lenguaje o el hecho de salir del ecosistema Python para lograr lo que se necesita.
La gran pregunta es: ¿Podemos hacer Python más rápido de manera nativa, sin salir del lenguaje?
¿Por qué no es fácil hacer Python más rápido? ⚙️
El rendimiento de Python no tiene que ver con ser un lenguaje interpretado, sino con algo más profundo: su dinamismo.
En lenguajes como C++ o Rust, las variables tienen un tipo bien definido. Esto permite que los compiladores generen código altamente optimizado porque pueden hacer suposiciones precisas sobre los datos con los que están trabajando.
En Python, las variables pueden cambiar su tipo, lo que significa que el intérprete tiene que hacer muchas verificaciones en tiempo de ejecución.
Esto limita las optimizaciones comunes que podrían aplicarse en lenguajes más estrictos.
¿Ayudarán los type hints a mejorar la velocidad? ♂️
Aunque Python ha introducido el sistema de type hints para hacer el código más legible y predecible, estos no son herramientas diseñadas para optimizar el rendimiento del código en tiempo de ejecución.
Son más una herramienta de análisis estático, no algo que se aproveche en el proceso de compilación o ejecución.
Por ejemplo, Cython permite optimizar el código, pero solo funciona bien con tipos de datos “puros” y no con objetos complejos como listas o diccionarios, que son comunes en Python.
¿Cómo se está haciendo Python más rápido ahora? ️
En las versiones recientes de CPython (la implementación más común de Python), han comenzado a implementarse cambios significativos:
- Intérprete adaptativo especializado: Este optimiza el código en tiempo de ejecución, utilizando tipos específicos cuando son consistentes en una región de código.
- PyPy y compiladores JIT: PyPy es una implementación alternativa de Python que utiliza un compilador JIT para mejorar la velocidad, pero implica tener que lidiar con problemas de compatibilidad y mantenimiento.
Eliminación del GIL: El Global Interpreter Lock (GIL) es un mecanismo en CPython que evita la ejecución paralela de múltiples hilos. Con nuevas implementaciones sin GIL, se espera que Python pueda aprovechar el rendimiento de múltiples núcleos de manera más eficiente, aunque aún está en fase experimental.
Estos avances muestran que, si bien no hay una única solución mágica, el camino para mejorar el rendimiento de Python implica reducir el trabajo del intérprete siempre que sea posible: menos comprobaciones de tipo, menos conteo de referencias, etc.
¿Por qué hacer Python más rápido desde dentro?
Muchos han sugerido que, en lugar de optimizar Python, sería mejor crear un lenguaje nuevo, altamente compatible con Python que se compile a código máquina nativo.
Mojo es un ejemplo de esto, ofreciendo una sintaxis similar a Python y algunas mejoras en el rendimiento.
Sin embargo, lograr una compatibilidad total con el ecosistema de Python es extremadamente difícil y cualquier nuevo lenguaje tendría que ganarse la aceptación y la comunidad que Python ya tiene.
Por lo tanto, la mejor solución es hacer que Python sea lo más rápido posible desde dentro del mismo lenguaje. Esto se puede lograr de forma gradual, sin tener que empezar de nuevo desde cero.
Las innovaciones que están llegando ahora pueden cambiar significativamente el panorama a largo plazo.
Conclusión
El camino hacia Python más rápido no será fácil ni rápido, pero es posible.
Las mejoras ya en marcha, como el intérprete adaptativo especializado y las implementaciones sin GIL, ofrecen una base sólida para futuros avances.
Aunque no haya una solución instantánea, el futuro parece prometedor, y lo que es importante es que las mejoras seguirán llegando.
¿La mejor parte? Podremos seguir disfrutando de Python mientras se vuelve más rápido, sin necesidad de salir de su ecosistema.
Este artículo te invita a reflexionar sobre los retos de optimizar Python y cómo las soluciones que se están implementando pueden allanar el camino hacia un futuro más rápido para este querido lenguaje.