Rust en 2025: nuevas capacidades en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Rust en 2025: ¿qué hay de nuevo? Capacidades prácticas



2025 se ha convertido en un año emblemático para el ecosistema de Rust. El lenguaje, que ya se ha ganado los corazones de los programadores de sistemas, desarrolladores web y creadores de herramientas de línea de comandos, ha recibido una serie de actualizaciones largamente esperadas. Si en 2023-2024 la atención principal se centró en la estabilización y mejora del conjunto de herramientas, en 2025 el énfasis se ha desplazado hacia la simplificación radical de la escritura de código complejo y el aumento del rendimiento sin pérdida de seguridad.



En este artículo, analizaremos tres innovaciones clave que ya están disponibles en la versión estable de Rust 2025 y las mostraremos con ejemplos concretos. Si sigue el desarrollo de Rust o recién está comenzando a familiarizarse con él, este material le ayudará a ponerse al día rápidamente.



1. Iteradores asíncronos: async gen y async for



Uno de los temas más candentes en 2025 fue la estabilización de los generadores e iteradores asíncronos. Anteriormente, escribir un iterador asíncrono requería la implementación manual del trait Stream o el uso de crates de terceros. Ahora todo es más simple y elegante.



La innovación clave es la palabra clave async en combinación con gen y la posibilidad de usar async for en bucles. Esto permite escribir código que genera y consume secuencias de datos de forma asíncrona, sin bloquear el hilo de ejecución.



Ejemplo: Generador asíncrono de números de Fibonacci



use std::time::Duration;use tokio::time::sleep;

// Generador asíncrono que "emite" números de Fibonacci con retardoasync fn async_fibonacci(limit: u32) -> impl AsyncIterator<Item = u64> { async gen { let (mut a, mut b) = (0, 1); for _ in 0..limit { sleep(Duration::from_millis(100)).await; // Simulación de trabajo asíncrono yield b; // Palabra clave yield let next = a + b; a = b; b = next; } }}

#[tokio::main]async fn main() { println!("Números de Fibonacci asíncronos (primeros 10):"); // Usamos async for para consumir async for number in async_fibonacci(10) { println!("Recibido: {}", number); } println!("¡Listo!");}


¿Qué aporta esto en la práctica?

  • Simplificación del código: Ya no es necesario escribir combinadores complejos del crate futures.
  • Legibilidad: El código se ve como un generador síncrono normal, pero funciona de forma asíncrona.
  • Rendimiento: El compilador optimiza estas construcciones, minimizando la sobrecarga.

Esto es especialmente útil para procesar flujos de datos de la red, leer archivos grandes o trabajar con conexiones WebSocket.



2. Borrow checker mejorado: Polonius estabilizado



El borrow checker es el "alma" de Rust, responsable de la seguridad de la memoria sin un recolector de basura. Sin embargo, los principiantes (y también los desarrolladores experimentados) a menudo se encontraban con situaciones en las que el compilador rechazaba código perfectamente seguro. En 2025, el modelo de préstamo Polonius finalmente se ha convertido en parte del compilador estable.



Polonius utiliza un análisis de flujo de datos más preciso, lo que permite al compilador "comprender" patrones más complejos de trabajo con referencias.



Ejemplo: El problema de "dos préstamos mutables"

Anteriormente, este código no se compilaba:



fn push_and_pop(vec: &mut Vec<i32>) -> &i32 {    vec.push(1);    // Error: no se puede tomar una referencia mutable (push) y luego una inmutable (pop)    let last = vec.last().unwrap();    last}


¡En Rust 2025 con Polonius esto funciona! El compilador ve que después de push la referencia mutable ya no se usa y permite tomar una referencia inmutable al último elemento. Así es como

Blogs

Book Recommendations