Rust
Seguridad de memoria sin recolector de basura, pagada en tiempo de compilación.
- Primera versión
- 2015 (1.0)
- Creado por
- Graydon Hoare, later sponsored by Mozilla
- Tipado
- Estático, fuerte, con inferencia y propiedad afín (ownership)
- Extensiones de archivo
- .rs
Para qué sirve
Rust se hizo cargo del trabajo que antes no tenía opción segura. Sistemas operativos, navegadores, motores de juegos, firmware embebido, bases de datos: cualquier lugar donde las pausas o el costo de un recolector de basura son inaceptables. La promesa es que puedes tener el control que C te da sobre la memoria y su disposición sin el talento de C para los use-after-free, las liberaciones dobles y las carreras de datos.
La propiedad es el mecanismo. Cada valor tiene exactamente un dueño, los préstamos se verifican de forma estática, y el compilador rechaza todo lo que no pueda probar correcto. Una categoría entera de bugs se muda de las tres de la mañana al paso de compilación. Por eso Rust sigue apareciendo en lugares sensibles a la seguridad, y por eso partes de Windows, Android y el kernel de Linux ya lo aceptan. Las mismas reglas hacen del borrow checker un muro para quien recién llega. La curva de aprendizaje es real, y está toda al principio.
Fuera del trabajo de sistemas se ha vuelto, sin hacer ruido, una gran opción para herramientas de línea de comandos y para el núcleo rápido de bibliotecas de otros lenguajes. Buena parte del tooling moderno de Python es Rust por debajo. Cargo, la herramienta de compilación y gestor de paquetes, es una razón subestimada de por qué la gente se queda.
De dónde viene
Graydon Hoare empezó Rust como proyecto personal alrededor de 2006. Mozilla comenzó a patrocinarlo en 2009, con la mira en un motor de navegador que pudiera ser paralelo sin ser un desastre de seguridad. Ese trabajo se convirtió en Servo, y partes de él llegaron a Firefox como Quantum.
Los años previos al 1.0 cambiaron el lenguaje sin parar. Un recolector de basura y los green threads se agregaron y luego se quitaron, y la sintaxis temprana, cargada de símbolos, se recortó con fuerza. Rust 1.0 llegó en mayo de 2015 con la garantía de estabilidad que se ha mantenido desde entonces. Las ediciones (2015, 2018, 2021 y 2024) permiten que el lenguaje haga cambios incompatibles un crate a la vez sin partir el ecosistema.
Mozilla despidió a buena parte del equipo de Rust en 2020. La Rust Foundation se formó en 2021, respaldada por AWS, Google, Huawei, Microsoft y Mozilla, para sostener el proyecto de forma independiente. La adopción ha seguido subiendo, empujada por gobiernos y grandes proveedores que por fin se toman en serio la seguridad de memoria.
Cómo se siente teclearlo
Rust tiene la puntuación más densa de aquí. Los lifetimes meten apóstrofos en posiciones de tipo, los genéricos apilan corchetes angulares, y las rutas usan :: en vez de un punto, un doble toque que tus dedos tienen que aprender en frío. Suma &, ?, ! y el turbofish, y es de lejos la mejor práctica para la fila de símbolos.
181 pasos en 12 tours, desde lo básico hasta programas completos.
Los tours
- Fundamentos del lenguajeRust antes de las partes difíciles. 39 pasos.
- Propiedad y préstamosEl tour donde Rust deja de ser familiar. 15 pasos.
- Iteradores y closuresLos iteradores de Rust son perezosos, de costo cero, y la forma idiomática de hacerle casi cualquier cosa a una colección. 14 pasos.
- Manejo de erroresRust no tiene excepciones, así que el manejo de errores vive en el sistema de tipos y no puedes ignorarlo por accidente. 15 pasos.
- Traits y genéricosLos traits son la forma en que Rust hace polimorfismo, y los genéricos son la forma en que se mantiene rápido mientras lo hace. 19 pasos.
- Concurrencia y asyncLa promesa de Rust sobre concurrencia es más fuerte que su promesa sobre memoria: las carreras de datos son un error de compilación, no una sesión de depuración. 15 pasos.
- Lifetimes y mutabilidad interiorLas anotaciones que casi todo el mundo evita hasta que ya no puede. 11 pasos.
- Módulos, pruebas y macrosLo que rodea al código. 12 pasos.
- Serde y JSONSerde es la razón por la que serializar en Rust es un derive y no una tarea pesada. 11 pasos.
- Herramientas CLI y clientes HTTPRust produce herramientas de línea de comandos muy buenas, y por eso gente que no escribe software de sistemas termina aprendiéndolo de todos modos. 12 pasos.
- Servicios web con axumUn servicio web pequeño en Rust. 9 pasos.
- Paralelismo de datos con rayonRayon convierte una cadena de iteradores secuencial en una paralela cambiando iter por par_iter, y el sistema de tipos verifica que eso sea realmente seguro. 9 pasos.
Documentación oficial
- The Rust Programming Language (el Libro)
- Referencia de la biblioteca estándar
- Rust by Example
- El libro de Cargo
- crates.io