Linguaxe de programación Rust versión 1.47

Publicouse a versión 1.47 da linguaxe de programación do sistema Rust, fundada polo proxecto Mozilla. A linguaxe céntrase na seguridade da memoria, proporciona unha xestión automática da memoria e proporciona os medios para lograr un alto paralelismo de tarefas sen utilizar un colector de lixo ou tempo de execución (o tempo de execución redúcese á inicialización básica e ao mantemento da biblioteca estándar).

A xestión automática da memoria de Rust elimina os erros ao manipular os punteiros e protexe contra problemas derivados da manipulación de memoria de baixo nivel, como acceder a unha rexión de memoria despois de que se liberase, desreferencias de punteiros nulos, desbordamentos do búfer, etc. Para distribuír bibliotecas, garantir a montaxe e xestionar dependencias, o proxecto está a desenvolver o xestor de paquetes Cargo. O repositorio crates.io é compatible para hospedar bibliotecas.

Principais novidades:

  • Implementouse soporte para trazos para matrices de tamaño arbitrario. Anteriormente, debido á incapacidade de definir funcións xenéricas para todos os valores enteiros, a biblioteca estándar proporcionaba soporte de trazos integrado só para matrices de ata 32 elementos de tamaño (os trazos para cada tamaño estaban definidos de forma estática). Grazas á creación da funcionalidade const xenéricos, fíxose posible definir funcións xenéricas para calquera tamaño de matriz, pero aínda non están incluídas nas características estables da linguaxe, aínda que están implementadas no compilador e agora úsanse na biblioteca estándar. para tipos de matriz de calquera tamaño.
    Por exemplo, a seguinte construción en Rust 1.47 imprimirá o contido dunha matriz, aínda que anteriormente provocaría un erro:

fn main() {
sexa xs = [0; 34];
println!("{:?}", xs);
}

  • Saída de trazos máis curtos (backtrace), saída en situacións de emerxencia. Os elementos que non son de interese na maioría das situacións, pero que desordenan a saída e distraen a atención das causas primarias do problema, quedan excluídos da traza. Para devolver un trazo completo, pode usar a variable de ambiente "RUST_BACKTRACE=full". Por exemplo, para o código

fn main() {
pánico!();
}

Anteriormente, a traza producíase en 23 etapas, pero agora reducirase a 3 etapas, o que lle permitirá comprender inmediatamente a esencia:

fío 'main' entrou en pánico en 'pánico explícito', src/main.rs:2:5
traza inversa da pila:
0: std::pánico::begin_panic
en /rustc/d…d75a/library/std/src/panicking.rs:497
1: parque infantil::principal
en ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
en /rustc/d…d75a/library/core/src/ops/function.rs:227

  • O compilador rustc foi actualizado para compilalo usando LLVM 11 (Rust usa LLVM como backend para a xeración de código). Ao mesmo tempo, mantense a capacidade de construír con LLVM antigo, ata a versión 8, pero agora utilízase de forma predeterminada (en rust-lang/llvm-project) LLVM 11. Espérase o lanzamento de LLVM 11 nos próximos días.
  • Na plataforma Windows, o compilador rustc ofrece soporte para habilitar as comprobacións de integridade do fluxo de control (Control Flow Guard), activadas mediante a marca "-C control-flow-guard". Noutras plataformas esta bandeira é ignorada polo momento.
  • Unha nova parte da API foi transferida á categoría estable, incluíndo Ident estabilizado::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU e f64::TAU.
  • O atributo "const", que determina a posibilidade de usalo en calquera contexto en lugar de constantes, úsase nos métodos:
    • novo para todos os números enteiros distintos de cero;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub e saturating_mul para todos os números enteiros;
    • is_ascii_alphabético, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace e is_ascii_control para os tipos char e u8.
  • Para FreeBSD, utilízase o conxunto de ferramentas de FreeBSD 11.4 (FreeBSD 10 non admite LLVM 11).

Tomado de opennet.ru

Fonte: linux.org.ru

Engadir un comentario