·6 min de lectura
Python love Rust
¿Por qué aprender Rust para un Python programmer es un gran deal?

El auge de Rust en el ecosistema Python
A día de hoy es increíble la cantidad de herramientas que usan el lenguaje Rust para su funcionamiento, pero para un programador Python esto va un paso más allá.
(Si no sabes lo que es Rust, es un lenguaje de programación moderno diseñado para ser tan rápido como C++ pero mucho más seguro, ya que previene errores de memoria en tiempo de compilación en lugar de dejarte sufrir con ellos en tiempo de ejecución.)
Python: simplicidad y ecosistema
Python es un lenguaje increíble; es simple (como todos saben) y su reporte de errores es preciso, a diferencia de muchos otros lenguajes. Esto ha generado con el tiempo una comunidad enorme que se ha encargado de crear un ecosistema de productos y herramientas de todo tipo, algo difícil de encontrar en otros lenguajes de programación. Si quieres hacer una prueba de concepto, ya existen herramientas que te facilitan el trabajo. Por ejemplo, si quieres obtener las traducciones de un vídeo de YouTube, solo instalas pytube y ya tienes una herramienta que lo hace por ti. Como este, hay una infinidad de casos de uso, y no solo para cosas triviales, sino para proyectos muy serios como procesamiento de imágenes o librerías de datos intensivos.
Pero Python tiene un problema en muchos casos: su enfoque está hecho para optimizar el desarrollo, no el performance bruto. La diferencia es abismal. ¿Necesitas siempre este rendimiento? La respuesta es no; para la mayor parte de los casos no es necesaria, pero Python ya provee una solución para cuando sí lo es.
Hay muchas librerías que aprovechan las capacidades de lenguajes óptimos como C++ y se usan como librerías de Python para que este haga lo que mejor sabe hacer: escribir lógica de negocio compleja y delegar el performance al bajo nivel. Esto es excelente y ha sido el estándar por mucho tiempo. Pero hoy en día, C++ es un lenguaje de bajo nivel muy útil que acarrea un problema que suele retrasar el desarrollo: la gestión de memoria. Es un tipo de problema que los programadores enfocados en alto nivel no solemos ver, pero que en bajo nivel requiere una gestión minuciosa.
En un lenguaje de alto nivel como Python, esto lo hace automáticamente el Garbage Collector. El coste de esto es un overhead por cada operación; cada vez que accedes o declaras una variable, el costo computacional es más alto que en un lenguaje como C++. Para el día a día esto no parece importante, pero si tienes una aplicación con 50.000 peticiones por segundo, esto puede suponer un coste de infraestructura enorme. (Si sigues leyendo, te mostraré por qué elegir una herramienta óptima incluso en proyectos pequeños es una buena idea para tu bolsillo emprendedor).
Rust soluciona esto de una forma muy estricta pero ideal: decide no confiar en el programador para la gestión de memoria y te obliga a escribir código óptimo de antemano. Esto hace que el lenguaje no necesite un Garbage Collector, permitiendo mantener características de un lenguaje de alto nivel pero con el performance de C++. Los ingenieros han visto mucho valor en esto, porque además de los problemas de rendimiento, la gestión de memoria es un problema de seguridad crítico; Microsoft indica que más del 80% de los problemas de seguridad se deben a esto. Con Rust, un programador sabe que su programa no tendrá estos fallos, ya que simplemente no compila si el código no es seguro.
Esto ha tenido un gran impacto en el mundo Python, reemplazando a C++ para crear librerías nativas utilizando PyO3. Esto ha disparado la reingeniería de muchos productos que usamos a diario:
- Pydantic fue reescrito en su versión v2 para usar Rust.
- Polars, escrito en Rust, es el sucesor natural de Pandas.
- Ruff (que me encanta), sucesor de Black, escrito con superpoderes de linter y auto-fix.
- Orjson, un serializador de JSON mucho más rápido que el nativo.
- UV, el reemplazo de pip y todos sus competidores.
Y la lista sigue creciendo...
Por qué Rust importa para los desarrolladores Python
Esto me ha hecho pensar que para un ingeniero que usa Python, aprender Rust es un gran deal. En vez de migrar a un lenguaje nuevo como Go, podemos escribir extensiones de Python con Rust para solucionar problemas complejos, obteniendo habilidades de bajo nivel modernas. De hecho, esto me ha llevado a empezar mi propio camino aprendiendo Rust como mi nuevo lenguaje complementario. A día de hoy, seleccionar un nuevo lenguaje para mi stack es algo que hago con mucho cuidado; hay tanto producto que se vuelve insostenible aprenderlo todo, y tener un foco estratégico es necesario.
Además, creo que aprender un lenguaje como Rust te ayuda a ser mucho mejor programador. Para ser eficiente en Rust debes aprender a escribirlo bien de antemano para que el código compile a la primera; te obliga a entender qué está pasando realmente con los datos.
El valor estratégico para las empresas
Si tienes una empresa donde el foco principal es Python, no necesitas tirar todo por la borda y cambiar de lenguaje. Creo que vale mucho la pena que uno o dos desarrolladores del equipo sepan Rust y utilicen PyO3 para escribir módulos optimizados que resuelvan problemas específicos en tus sistemas.
La lógica que es cambiante, que no se ejecuta constantemente o donde el performance no es crítico, puede seguir en el Python de toda la vida. Pero vale la pena optimizar con Rust esas partes donde el rendimiento es clave, donde los costos de infraestructura se elevan y donde cada segundo cuenta para la experiencia del usuario o el proceso de datos. Es una forma inteligente de escalar sin perder la agilidad de desarrollo que te da Python.
Optimización desde el inicio: el enfoque emprendedor
Como decía antes, es importante seleccionar herramientas con un performance adecuado incluso al inicio de los proyectos. Como emprendedor e ingeniero siempre escucho la frase "No optimices antes de tiempo", que está bien (es algo que diferencia a los juniors de los seniors), pero déjenme decirles que la mayoría de las veces la gente "descansa" en esa frase. Como emprendedor, sin inversores y pagando los servidores de tu bolsillo, tener algo óptimo desde el principio sí cuenta.
Muchos ingenieros que no desarrollan productos propios no ven esto. He trabajado en grandes empresas con ingenieros muy buenos que no entienden la importancia de gestionar costes porque trabajan con dinero que se siente infinito. Pero cuando experimentas esto por tu cuenta, la cosa cambia. Para ejemplificarlo, les muestro un caso real con números diluidos:
Un caso real: Python vs Go en costos de infraestructura
Tengo una infraestructura con Python en AWS que cuesta 100 USD al mes. Todo bien, pero el beneficio del servicio son solo 10 USD. Me pregunté qué habría pasado si hubiera usado un lenguaje más óptimo para crear esa app. Pasé de la pregunta al experimento: levanté una infraestructura en un contenedor con recursos mínimos que me costaban 20 USD mensuales y realicé una prueba de carga. Con esa configuración, Python llegaba al límite para soportar 100 usuarios. Luego repliqué las APIs más pesadas del servicio y las escribí con Go (aquí la IA ayudó bastante). La sorpresa fue que, para la misma carga de 100 usuarios, el sistema solo gastaba el 10% de los recursos de esa máquina de 20 USD. Es decir, con esos mismos 20 dólares podía soportar hasta 1000 usuarios en Go, mientras que para soportar esos mismos 1000 usuarios con la infraestructura original de Python, ¡habría tenido que escalar hasta pagar 200 USD!
Verlo así me voló la mente. Generalmente hablamos de performance por hablar, pero no solemos hablar de performance desde el dinero que nos ahorramos. Elegir un lenguaje más óptimo significa más beneficios mensuales y más dinero para mi bolsillo. Si bien para este caso quizá no elegiría Go, sí podría haber usado un framework como FastAPI o extensiones en Rust para ganar ese performance sin perder experiencia de desarrollo.
Conclusión: rentabilidad y tecnología
Hoy estoy pensando seriamente en mover mis tecnologías solo por una cuestión de rentabilidad personal. Es fundamental pensar en qué tecnologías usamos; a veces, sin mucho esfuerzo, podemos mejorar el rendimiento y ganar mucho más dinero en el camino.