Rust
Qué es
Rust es un lenguaje compilado de sistemas centrado en la seguridad de memoria. La mayoría de los lenguajes ejecutan un recolector de basura — un limpiador automático de memoria que trabaja en segundo plano para liberar memoria sin usar. Rust se salta eso y, en cambio, demuestra que tu memoria se maneja correctamente mientras compila tu programa. Piensa en un libro de biblioteca: solo una persona puede tenerlo y escribir en él a la vez, y el sistema se niega a prestar un libro que ya fue devuelto y desechado — así que nunca puedes usar accidentalmente algo que ya no existe. Eso es lo que el modelo de propiedad (ownership) y préstamo (borrowing) de Rust hace con tus datos. Garantiza, antes de que tu programa se ejecute siquiera, que no tendrás carreras de datos (data races: dos partes del código cambiando lo mismo al mismo tiempo) ni errores de uso después de liberar (use-after-free: usar memoria que ya fue limpiada). El resultado es velocidad a nivel de C con muchas menos formas de dispararte en el pie.
Fortalezas
- Seguridad de memoria y de hilos verificada mientras se compila el programa, sin necesidad de recolector de basura (el limpiador de memoria en segundo plano que usan la mayoría de los lenguajes).
- Rendimiento a la par de C y C++.
- Sistema de tipos rico, coincidencia de patrones (pattern matching) y un gestor de paquetes de primer nivel (Cargo, la herramienta integrada de compilación y empaquetado de Rust).
- Excelentes errores del compilador que explican qué salió mal y cómo solucionarlo.
Contrapartidas
- Curva de aprendizaje pronunciada — el borrow checker (la parte de Rust que impone las reglas de "un solo tenedor a la vez" del libro mencionado arriba) toma tiempo real para acostumbrarse.
- Más lento de escribir y más lento de compilar que los lenguajes de más alto nivel.
- Excesivo para scripts simples o prototipos rápidos.
- El código asíncrono en Rust y el código genérico cargado de lifetimes (tiempos de vida) puede volverse realmente intrincado.
Cuándo recurrir a él
Recurre a Rust cuando el rendimiento, la fiabilidad y el control de recursos importan todos a la vez: software de sistemas, motores de videojuegos, herramientas de línea de comandos, WebAssembly, sistemas embebidos o servicios críticos en rendimiento. Encaja mal en scripts desechables, donde las garantías de seguridad no compensan la fricción.
Encaje con vibe coding
Los asistentes de IA generan Rust plausible, pero el borrow checker es el verdadero árbitro — espera tener que pegar de vuelta los errores del compilador e iterar, lo cual funciona bien porque los diagnósticos de Rust son precisos y el modelo puede actuar sobre ellos. Indícale a la IA que se apoye en Result y ? para el manejo de errores, que prefiera tipos con propiedad (owned types) o préstamos (borrows) claros en lugar de pelear con los lifetimes, y que sugiera crates (los paquetes de código reutilizable de Rust, listados en Cargo.toml) de forma explícita. Pide casos de cargo test para poder verificar la seguridad y el comportamiento. Cuando el modelo proponga unsafe, cuestiónalo y pide primero una alternativa segura.
fn main() {
let nums = vec![3, 1, 4, 1, 5, 9, 2, 6];
let sum: i32 = nums.iter().filter(|&&n| n % 2 == 0).sum();
println!("Sum of evens: {sum}");
}