Lanzamiento de Rust 2024 Edition - Evolución del lenguaje y nuevas funciones

2025.12.15

Qué es Rust 2024 Edition

En febrero de 2025, Rust 2024 Edition se lanzó junto con Rust 1.85. Esta es la primera nueva edición en 3 años e incluye mejoras significativas en las funciones del lenguaje y mejoras ergonómicas.

Referencia: The Rust Edition Guide

Nuevas funciones principales

1. gen blocks (generadores)

Permite crear iteradores de forma más intuitiva.

// Método convencional
fn fibonacci() -> impl Iterator<Item = u64> {
    let mut a = 0;
    let mut b = 1;
    std::iter::from_fn(move || {
        let result = a;
        (a, b) = (b, a + b);
        Some(result)
    })
}

// Rust 2024: gen blocks
fn fibonacci() -> impl Iterator<Item = u64> {
    gen {
        let mut a = 0u64;
        let mut b = 1;
        loop {
            yield a;
            (a, b) = (b, a + b);
        }
    }
}

2. async closures

Los closures asíncronos ahora son oficialmente compatibles.

// Antes se necesitaban soluciones alternativas
let fetch = |url| async move {
    reqwest::get(url).await
};

// Rust 2024: async closure nativo
let fetch = async |url: &str| {
    reqwest::get(url).await
};

// Se puede usar el trait AsyncFn
async fn process<F>(f: F)
where
    F: AsyncFn(&str) -> Result<Response, Error>
{
    f("https://example.com").await
}

Referencia: Rust Async Book

3. Nuevo prelude

Future e IntoFuture se han añadido al prelude.

// Ya no se necesita importación explícita
// use std::future::Future; // Innecesario

async fn example() -> impl Future<Output = i32> {
    async { 42 }
}

4. Mejoras en RPIT (Return Position Impl Trait)

El tipo de retorno se ha vuelto más flexible.

// RPIT lifetime capture rules
fn process<'a>(data: &'a str) -> impl Iterator<Item = &'a str> {
    data.split(',')
}

// Rust 2024: + use<> para especificar lifetime explícitamente
fn process<'a>(data: &'a str) -> impl Iterator<Item = &str> + use<'a> {
    data.split(',')
}

Cambios en el lenguaje

1. Ámbito de variables temporales en if/while let

// Rust 2024: Ámbito más intuitivo
if let Some(guard) = lock.lock() {
    // El ámbito de guard termina aquí
}
// Aquí el lock ya está liberado (prevención de deadlock)

2. Explicitud de atributos unsafe

// Los atributos no seguros requieren especificación explícita
#[unsafe(no_mangle)]
pub extern "C" fn my_function() {}

#[unsafe(link_section = ".custom")]
static DATA: [u8; 4] = [0; 4];

3. static mut queda obsoleto

// Obsoleto
static mut COUNTER: u32 = 0;

// Recomendado: Usar SyncUnsafeCell
use std::cell::SyncUnsafeCell;
static COUNTER: SyncUnsafeCell<u32> = SyncUnsafeCell::new(0);

Referencia: Rust Reference

Mejoras en el toolchain

Mejoras en Cargo

# Cargo.toml
[package]
name = "my-project"
version = "0.1.0"
edition = "2024"  # Nueva edición

# Nueva función: dev-dependencies separadas por defecto
[dev-dependencies]
criterion = "0.5"
# Mejoras en el formateador
cargo fmt -- --edition 2024

# Nuevos lints de Clippy
cargo clippy -- -W rust-2024-idioms

Estilo rustfmt 2024

// Nuevo estilo de formato
let result = some_function(
    very_long_argument_1,
    very_long_argument_2,
);

// Mejora en el formato de métodos encadenados
let output = input
    .iter()
    .filter(|x| x.is_valid())
    .map(|x| x.transform())
    .collect::<Vec<_>>();

Migración

Migración automática

# Actualizar edición
cargo fix --edition

# Verificar cambios
cargo check

# Responder a nuevas advertencias
cargo clippy --fix

Actualización de Cargo.toml

[package]
edition = "2024"
rust-version = "1.85"

Referencia: Rust Blog - Edition 2024

Mejoras de rendimiento

Tiempo de compilación

ElementoRust 2021Rust 2024
Build completoBase-15%
IncrementalBase-25%
Tiempo de enlaceBase-20%

Optimización en tiempo de ejecución

// El compilador optimiza más agresivamente
#[inline(always)]
fn hot_path(x: u32) -> u32 {
    // Las mejoras en optimización LLVM
    // generan código más eficiente
    x.wrapping_mul(31).wrapping_add(17)
}

Compatibilidad del ecosistema

Estado de compatibilidad de crates principales

CrateCompatible con 2024 Edition
tokio
serde
actix-web
axum
diesel

Resumen

Rust 2024 Edition ha mejorado significativamente la expresividad y usabilidad del lenguaje.

  • gen blocks: Simplificación de la creación de iteradores
  • async closures: Mejoras en programación asíncrona
  • Refuerzo de seguridad: Explicitud de atributos unsafe
  • Toolchain: Reducción del tiempo de compilación

Los proyectos existentes pueden migrarse fácilmente con cargo fix --edition.

← Volver a la lista