Linguaxe de programación Rust versión 1.66

Publicouse o lanzamento da linguaxe de programación de propósito xeral Rust 1.66, fundada polo proxecto Mozilla, pero agora desenvolvida baixo os auspicios da organización independente sen ánimo de lucro Rust Foundation. A linguaxe céntrase na seguridade da memoria e proporciona os medios para conseguir un alto paralelismo de traballos evitando o uso dun colector de lixo e o tempo de execución (o tempo de execución redúcese á inicialización básica e ao mantemento da biblioteca estándar).

Os métodos de manexo da memoria de Rust salvan ao desenvolvedor de erros ao manipular os punteiros e protexen contra os problemas que xurdan debido ao manexo de memoria de baixo nivel, como acceder a unha área de memoria despois de liberarse, desreferenciar punteiros nulos, exceder o búfer, etc. Para distribuír bibliotecas, proporcionar compilacións e xestionar dependencias, o proxecto desenvolve o xestor de paquetes Cargo. O repositorio crates.io é compatible para hospedar bibliotecas.

A seguridade da memoria ofrécese en Rust no momento da compilación mediante a comprobación de referencias, o seguimento da propiedade do obxecto, o seguimento da vida útil dos obxectos (ámbitos) e a avaliación da corrección do acceso á memoria durante a execución do código. Rust tamén ofrece protección contra desbordamentos de enteiros, require a inicialización obrigatoria dos valores variables antes do seu uso, manexa mellor os erros na biblioteca estándar, aplica o concepto de referencias e variables inmutables por defecto, ofrece unha forte escritura estática para minimizar os erros lóxicos.

Principais novidades:

  • Nas enumeracións con representacións enteiras (o atributo "#[repr(Int)]", permítese a indicación explícita do discriminante (número de variante na enumeración), aínda que a enumeración conteña campos. #[repr(u8)] enum Foo { A(u8), # discriminante 0 B(i8), # discriminante 1 C(bool) = 42, # discriminante 42 }
  • Engadiuse a función core::hint::black_box que simplemente devolve o valor recibido. Dado que o compilador pensa que esta función está a facer algo, a función black_box pode usarse para desactivar as optimizacións do compilador para bucles ao realizar probas de rendemento do código ou ao examinar o código máquina xerado (para que o compilador non considere o código sen usar e elimínao). Por exemplo, no seguinte exemplo, black_box(v.as_ptr()) impide que o compilador pense que o vector v non se está a usar. use std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); caixa_negra(v.as_ptr()); } }
  • O xestor de paquetes "cargo" ofrece o comando "eliminar", que che permite eliminar dependencias do manifesto Cargo.toml desde a liña de comandos.
  • Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{primeiro, último, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Engade implementacións AsFd para tipos de bloqueo stdio ao usar WASI.
    • impl TryFrom > para Caixa<[T; N]>
    • core::hint::black_box
    • Duración::try_from_secs_{f32,f64}
    • Opción::descomprimir
    • std::os::fd
  • Os intervalos "..X" e "..=X" están permitidos nos modelos.
  • Ao construír a parte frontal do compilador rustc e o backend LLVM, utilízanse os modos de optimización LTO (Link Time Optimization) e BOLT (Binary Optimization and Layout Tool) para aumentar o rendemento do código resultante e reducir o consumo de memoria.
  • Implementouse o soporte de nivel 5 para as plataformas armv5te-none-eabi e thumbvXNUMXte-none-eabi. O terceiro nivel implica soporte básico, pero sen probas automatizadas, publicar compilacións oficiais e comprobar a capacidade de construír o código.
  • Engadiuse compatibilidade para vincular a bibliotecas xenéricas de macOS.

Ademais, podemos observar a inclusión na base de código GCC do compilador front-end da linguaxe Rust (gccrs). O frontend inclúese na rama GCC 13, que se lanzará en maio de 2023. A partir de GCC 13, o kit de ferramentas GCC estándar poderá utilizarse para compilar programas Rust sen necesidade de instalar o compilador rustc construído mediante desenvolvementos LLVM. A implementación de Rust en GCC 13 estará en estado beta, non activada por defecto.

Fonte: opennet.ru

Engadir un comentario