18 puntos por GN⁺ 2025-06-12 | 5 comentarios | Compartir por WhatsApp
  • Un texto que resume 10 años de experiencia adoptando Rust en trabajo real desde poco después del lanzamiento de Rust 1.0, y lo que se espera para los próximos diez años
  • Al principio fueron difíciles los problemas de compatibilidad entre versiones, el tiempo de compilación y adaptarse al borrow checker
  • La comunidad y el ecosistema de Rust avanzaron rápidamente gracias a un “sentido excepcional de la programación” y una fuerte cultura comunitaria, y destaca cómo muchos desarrolladores sobresalientes terminan llegando a Rust
  • Hoy Rust ya se convirtió en una “opción estable” en sistemas generales y backend, y la evolución de la biblioteca estándar y la madurez del ecosistema de crates redujeron mucho la incertidumbre
  • Se presentan de forma concreta los retos pendientes y la dirección de evolución de Rust, como velocidad de compilación, portabilidad, capacidades const, concurrencia y expansión a distintos dominios
  • Se proyecta que los próximos 10 años traerán compilación más rápida, expansión amplia a más dominios e innovación en la experiencia de desarrollo, y que el ciclo de retroalimentación positiva del ecosistema Rust se acelerará

  • En junio de 2015, aproximadamente un mes después de que se calmara el entusiasmo por el anuncio de Rust 1.0, escribí mi primer código en Rust
  • Venía usando C, Python y JavaScript, pero después de conocer Rust, nunca volví la vista atrás
  • Comparto una reflexión de 10 años basada en la experiencia de haber escrito más de 500 mil líneas de código y de haber trabajado en dos startups basadas en Rust

Los primeros años fueron duros - The early days were painful

  • Al adoptar Rust en sus inicios, la compatibilidad de versiones entre crates y compilador era muy inestable, y era común tener que actualizar a la fuerza todo el entorno de build incluso por pequeños bugfixes
  • El concepto del borrow checker y el manejo de lifetimes se sentían difíciles, y a medida que crecían los tipos complejos, el tiempo de compilación aumentaba drásticamente, lo que se volvió un problema serio
  • Cada vez que hacía falta una nueva función o un bugfix, había que actualizar “todas las versiones del mundo”, y se gastaba mucho tiempo encontrando combinaciones compatibles

La excelencia de la comunidad Rust - The people were and are exceptional

  • En el ecosistema Rust se asentó una cultura de programación excepcional, orientada a implementaciones simples y elegantes, con rendimiento rápido y robusto
  • Comparado con TypeScript o Python, la estructura de dependencias de Rust es mucho más limpia y el build más simple
  • Las contribuciones dedicadas de voluntarios de la comunidad y la postura prudente de “ahora no / todavía no” han cumplido un papel clave
  • En Londres, contratar desarrolladores Rust fue una gran ventaja, y el nivel promedio de los desarrolladores Rust es muy alto

Rust se volvió una apuesta segura (en algunos dominios) - Rust has become a safe bet (in some domains)

  • Al principio, la falta de una biblioteca estándar (std) obligaba a crear funciones utilitarias y parches por cuenta propia, pero ahora la mayoría de esas capacidades ya vienen integradas en std y en los crates, lo que redujo mucho la incertidumbre
  • La previsibilidad del build y de las actualizaciones, la reducción de dependencias externas, el cumplimiento de semver y las mejoras en el borrow checker y el motor de inferencia estabilizaron mucho la experiencia de usar Rust
  • Nuevos crates como jiff, polars y tauri se desarrollan a partir de los errores del pasado, mientras que tokio, hyper y regex ya están comprobados en producción
  • Antes era inevitable “reinventar la rueda”, pero ahora ya es posible concentrarse en la lógica de negocio para desarrollar aplicaciones de alto rendimiento y gran solidez

El entorno de desarrollo que muestra Rust hoy - Rust today feels like what programming should be

  • Rust es un lenguaje con empatía hacia quienes programan, con un sistema de build conciso y sólido, los mejores mensajes de error y lints, excelente documentación e integración con IDE, y CI y pruebas de regresión muy potentes
  • Entre los grandes proyectos open source, hay pocos lenguajes tan amigables para programadores como Rust
  • La “inversión de largo plazo” de incontables comunidades y contribuidores es el factor clave que hizo posible el Rust actual

Lo que espero para los próximos 10 años - What I’m looking forward to over the next 10 years

Builds más simples y rápidos - Simpler and faster builds

  • Se espera que continúe el trabajo de reemplazar dependencias complejas o lentas por alternativas simples y rápidas
  • Se esperan nuevos intentos como una biblioteca estándar enteramente en Rust, menos dependencia del linker y de bibliotecas del sistema, criptografía pure-Rust, BTreeMap persistente y motores de juego basados en Rust
  • En Tably también, durante los últimos meses, la velocidad de compilación del frontend y backend mejoró un 60%

Más portabilidad y menos #[cfg()] - Improved portability and less #[cfg()]

  • Es difícil probar todas las combinaciones de plataformas y opciones, y #[cfg()] provoca código sin verificar, documentación incompleta y problemas en el IDE
  • Se espera que mover #[cfg()] dentro del trait system permita garantías por plataforma/opción, menos recompilaciones, caché MIR y CI más rápido

Que todo el código sea const - Everything being const

  • Hacer más trabajo en tiempo de compilación permitiría reducir la dependencia de macros y build scripts, y también prevenir antes errores en runtime
  • Hoy sigue siendo algo limitado, pero hacia adelante se apunta a un Rust donde “todo el código pueda ejecutarse en un contexto const

Simplificar la concurrencia - Simpler concurrency

  • El modelo async actual de Rust tiene mucha complejidad práctica, como static bound, cancellation-safety y restricciones de traits, lo que dificulta el trabajo real
  • Hace falta avanzar hacia una concurrencia más simple a nivel de lenguaje, como los antiguos user-space green threads (libgreen)

Ganar competitividad en más dominios - Excelling in more domains

  • El uso de Rust dentro del navegador web (especialmente wasm/rustwasm) sigue siendo un área todavía poco explorada, y aún quedan varios retos como stack traces cross-browser
    • Aunque marcos como leptos y sycamore siguen avanzando, todavía hay mucho por mejorar
  • También se espera mejora continua en dominios que Rust todavía no ha terminado de conquistar, como rapid prototyping, lógica de negocio, GUI, machine learning y desarrollo de videojuegos

Conclusión

  • El futuro del crecimiento de Rust es muy claro y prometedor
  • A medida que aumenta la adopción, crecen las capacidades de ingeniería y testing, lo que genera un círculo virtuoso de adopción más amplia y mejoras
  • En los próximos 10 años se volverán realidad compilaciones más rápidas, aplicación en más áreas y una experiencia de desarrollo más fluida
  • Espero con entusiasmo la nueva década de Rust

5 comentarios

 
ndrgrd 2025-06-12

Rust tiene muchas cosas buenas, pero el lenguaje exige demasiado.
Cuando usas Rust, a veces parece que estás estudiando el lenguaje en sí en vez de concentrarte en implementar la idea.

Supongo que no habría mucho problema para migrar un proyecto ya hecho, como por ejemplo desde C++,
pero no estoy seguro de qué tan cómodo sea usarlo para implementar ideas nuevas.

 
felizgeek 2025-06-12

Para prototipado, recomiendo Python.

 
ndrgrd 2025-06-12

Personalmente prefiero los sistemas de tipos, así que ahora uso C# y creo que con esto me siento bastante satisfecho.

 
codemasterkimc 2025-06-12

Personalmente, si piensas en el medioambiente del planeta, RUST. ¡¡¡Código legacy de Spring a Axum!!!

 
GN⁺ 2025-06-12
Opinión de Hacker News
  • Es un texto muy positivo y coincide con mi experiencia. Dicho eso, si tuviera que señalar una perspectiva sombría, sería esta parte:
    "async tiene un costo de complejidad relativamente alto debido a límites static, seguridad de cancelación, restricciones relacionadas con traits y dyn, entre otras cosas. Por ahora no se ve que este problema vaya a resolverse. La bifurcación entre primitivas síncronas/asíncronas y las características propias del ecosistema elevan el async tax (costo adicional). Las soluciones basadas en effects tampoco parecen especialmente prometedoras."
    "Antes de Rust 1.0 existía una solución llamada libgreen. Implementaba concurrencia en espacio de usuario sin bifurcación, pero terminó eliminándose por los costos considerables de rendimiento, portabilidad y mantenimiento. Si se cuenta con suficiente capacidad de ingeniería, creo que valdría la pena reconsiderarlo. Algún día me gustaría hacer un PoC que envuelva std::{fs, net} y fiber::{spawn, select} con generators a zero-cost"
    • Mi opinión es que la discusión de que "el límite 'static aumenta la complejidad" es solo una decisión de diseño del runtime async de Tokio, y no algo que deba verse como parte del diseño general de Rust. El runtime async Embassy funciona sin ese límite, aunque a cambio hay que gestionar el pinning manualmente. En realidad, el límite 'static busca reducir la complejidad
  • Como alguien que se metió de lleno en Rust y lo estudió a finales de 2022, siempre me resultan interesantes las historias de quienes aprendieron el lenguaje en una época más difícil, como 2015. Siento que tuve suerte de poder aprender Rust en una etapa más madura, cuando la curva de aprendizaje, que ya de por sí es empinada, estaba algo más suavizada. Últimamente tengo la sensación de estar reviviendo en Zig lo que se menciona en el texto sobre los primeros años de Rust. Zig parece estar en un momento parecido al del Rust temprano. Aun así, ya lo estoy usando con bastante gusto
    • Hay una cultura muy fuerte de "dejar las cosas mejor de como las encontraste". Está muy arraigada la idea de que si una herramienta o un lenguaje te confundió, no es culpa del usuario. Si yo me confundí, otros también se van a confundir, así que mejorar eso cada vez que se detecta beneficia mucho a todos. Aquí aplica el dicho de que el segundo mejor momento para plantar un árbol es hoy. Gracias a esa cultura, alguien que probó Rust antes y se frustró puede encontrarse un año después con una experiencia claramente mejor. Por eso, el mejor consejo que se les daba a quienes querían empezar con Rust era: "espera seis meses"
    • Si un lenguaje fue adoptado por big tech como MSFT, Google o por grandes proyectos open source como Linux, eso ya es prueba de que su ecosistema está lo bastante maduro. Pero con Zig no tengo esa certeza todavía, porque aún no ha mostrado un cambio tan grande frente a las herramientas existentes
  • Siento que Rust fomenta la programación funcional. Al principio intenté hacer un parser que cambiara su estado interno en cada advance, pero se me complicó por la mutabilidad y el sistema de préstamos (borrowing), así que tuve que cambiarlo por un parser sin estado. Terminé rediseñándolo para que devolviera el índice en lugar de modificar un índice interno. Me pregunto si es común que en Rust uno tenga que abordar las cosas de una forma nueva porque el enfoque tradicional no funciona bien
    • A mí me pasó algo parecido. En casos simples, un estilo mutable e imperativo no da problema, pero a medida que crece la complejidad, termino pasándome a un estilo funcional y evitando las mutaciones lo más posible. Por el borrow checker y los lifetimes, los patrones tradicionales se vuelven difíciles y uno naturalmente se va hacia lo funcional. Si no estás acostumbrado a implementar cosas de forma funcional, puede ser duro, pero la experiencia de dejar satisfecho al compilador también resulta bastante gratificante
  • Async/await es la única razón por la que no uso Rust
    • De hecho, yo creo que async/await es una de las principales razones para usar Rust. Hace que los patrones de concurrencia sean mucho más simples. Al principio sentía como si fuera una epidemia maligna donde todo el código acababa teniendo que ser async, pero una vez que aprendes a interactuar con código async se vuelve cómodo. Normalmente spawn, spawn_blocking y futures::stream cubren el 90% de los casos de uso, y si estableces bien las "fronteras", async ni siquiera tiene que propagarse
    • Hasta cierto punto lo entiendo. Pero a mí en Rust async/await me encajó perfecto y terminó siendo una de mis principales razones para usarlo. Me gusta la sintaxis y el problema del function colouring no me molesta mucho. Sobre todo cuando usas tokio, porque están las versiones async de las funciones estándar que necesitas, así que siento que la solución fluye bien. Esto puede ser una barrera en algunos casos, pero hace mucho más fácil escribir programas concurrentes y el rendimiento también me parece bueno, así que estoy satisfecho. Con cosas como la cancelación a veces sí me enredo un poco, pero creo que eso ya es más por falta de habilidad mía
    • ¿No está ya todo eso disponible ahora?