Volver al inicio

Rust 1.94.0: Nuevos Métodos y Configuración de Cargo | Reseña de IT

Lanzamiento de Rust 1.94.0 Incluye Estabilización del Método array_windows para Procesar Ventanas de Longitud Fija, Soporte para Clave include en Archivos de Configuración de Cargo y Transición a TOML 1.1. Estos Cambios Simplifican la Escritura de Código Seguro y Legible, así como Configuración Flexible de Proyectos. Actualización Recomendada para Todos los Desarrolladores de Rust.

Rust 1.94.0: ¿Cómo las Nuevas Funciones Mejorarán Tu Código? Detalles del Lanzamiento
Advertisement 728x90

# Rust 1.94.0: estabilización de array_windows, clave include en configuraciones y transición a TOML 1.1

Rust 1.94.0 ha sido lanzada, trayendo varias mejoras significativas para los desarrolladores. Las principales nuevas características incluyen el método array_windows para iterar sobre arrays de longitud fija, soporte para la clave include en archivos de configuración de Cargo y el cambio a TOML 1.1. Así es como estos cambios simplificarán tu trabajo.

El método array_windows: Trabajando con ventanas de longitud fija

En la nueva versión de Rust, el método array_windows para slices ha sido estabilizado. Permite iterar sobre un slice con ventanas de longitud fija, eliminando la necesidad de indexación manual y verificación de límites. A diferencia del método windows, que devuelve slices de longitud dinámica (&[T]), array_windows devuelve referencias a arrays de longitud fija (&[T; N]).

Esto es especialmente útil en tareas donde necesitas procesar elementos consecutivos con un tamaño de ventana conocido. Por ejemplo, para encontrar el patrón ABBA (dos letras diferentes seguidas de su orden inverso) en una cadena, puedes usar el siguiente código:

Google AdInline article slot
fn has_abba(s: &str) -> bool {
    s.as_bytes()
        .array_windows()
        .any(|[a1, b1, b2, a2]| (a1 != b1) && (a1 == a2) && (b1 == b2))
}

El compilador infiere automáticamente la longitud de la ventana (4) del patrón de desestructuración en el cierre. Con windows(4), tendrías que verificar manualmente los índices, lo que es menos seguro y legible.

Gestión de la configuración de Cargo con la clave include

Cargo ahora soporta la clave include en archivos de configuración (.cargo/config.toml). Esta característica simplifica la organización, compartición y gestión de configuraciones entre proyectos y entornos.

La clave include puede ser un array de rutas o una tabla en línea con opciones adicionales. Por ejemplo:

Google AdInline article slot
# Array de rutas
include = [
    "frodo.toml",
    "samwise.toml",
]

# Tablas en línea para ajustes finos
include = [
    { path = "required.toml" },
    { path = "optional.toml", optional = true },
]

La opción optional = true permite indicar que un archivo puede estar ausente en algunos entornos (por ejemplo, en la máquina local de un desarrollador). Esto aumenta la flexibilidad de la configuración sin necesidad de ramas separadas.

Cambio a TOML 1.1: ¿Qué ha cambiado?

Cargo ahora soporta completamente TOML 1.1 para manifiestos y archivos de configuración. Esto incluye varias mejoras convenientes:

  • Posibilidad de extender tablas en línea a través de múltiples líneas con comas finales.
  • Nuevas secuencias de escape para cadenas: \xHH y \e.
  • Segundos opcionales en representaciones de tiempo (por defecto: 0).

Ejemplo de una tabla en línea multilínea:

Google AdInline article slot
serde = {
    version = "1.0",
    features = ["derive"],
}

Nota: Usar nuevas características de TOML 1.1 en Cargo.toml eleva la versión mínima de Rust soportada (MSRV) a una que requiera el nuevo analizador de Cargo. Sin embargo, al publicar un crate, Cargo reescribe automáticamente el manifiesto a un formato compatible con analizadores antiguos. Esto te permite mantener soporte para versiones anteriores de Rust para los usuarios de tu crate.

APIs estabilizadas: Lista completa

La versión 1.94.0 estabiliza muchas APIs que estaban previamente en desarrollo. Aquí las principales:

  • Métodos de slice: <[T]>::array_windows, <[T]>::element_offset
  • Métodos de LazyCell: get, get_mut, force_mut
  • Métodos de LazyLock: get, get_mut, force_mut
  • Conversión: impl TryFrom<char> for usize
  • Métodos de Peekable: next_if_map, next_if_map_mut
  • Funciones intrínsecas para x86 (AVX-512 FP16) y AArch64 (NEON FP16), excepto aquellas que dependen del tipo inestable f16
  • Constantes matemáticas: f32::consts::EULER_GAMMA, f64::consts::EULER_GAMMA, f32::consts::GOLDEN_RATIO, f64::consts::GOLDEN_RATIO
  • Los métodos f32::mul_add y f64::mul_add ahora son estables en contextos const

Estos cambios amplían las capacidades de la biblioteca estándar y hacen el código más expresivo.

Puntos clave para desarrolladores

  • Manejo simplificado de ventanas: El método array_windows reduce el código repetitivo al trabajar con ventanas fijas, mejorando la seguridad y legibilidad.
  • Flexibilidad en configuraciones: La clave include en Cargo permite ensamblar configuraciones modulares, lo que es especialmente útil para proyectos grandes y equipos.
  • Compatibilidad con TOML 1.1: Las nuevas características de TOML hacen los archivos de configuración más cómodos, pero ten en cuenta el MSRV al usarlas en Cargo.toml.
  • Expansión de la biblioteca estándar: Estabilizar nuevas APIs —incluidas constantes matemáticas y métodos de iteradores— simplifica tareas cotidianas.

Se recomienda actualizar a Rust 1.94.0 a todos los desarrolladores para aprovechar estas mejoras. Usa el comando rustup update stable para instalarla.

— Editorial Team

Advertisement 728x90

Leer después