Linguaxe de programación Rust versión 1.47

publicado versión 1.47 da linguaxe de programación do sistema Ferrugem, fundada polo proxecto Mozilla. A linguaxe céntrase na seguridade da memoria, ofrece xestión automática da memoria e proporciona un medio para conseguir un alto paralelismo de tarefas sen usar colector de lixo и tempo de execución (o tempo de execución redúcese á inicialización e mantemento básicos da biblioteca estándar).

A xestión automática da memoria de Rust elimina os erros ao manipular os punteiros e protexe contra os problemas derivados da manipulación de memoria de baixo nivel, como acceder a unha rexión de memoria despois de liberarse, desreferencias de punteiros nulos, desbordamentos do búfer, etc. Estase a desenvolver un xestor de paquetes para distribuír bibliotecas, garantir a montaxe e xestionar as dependencias do proxecto. Carga. Admítese un repositorio para aloxar bibliotecas caixóns.io.

O principal innovacións:

  • Soporte implementado para tipos matrices 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 de xenéricos constantes ("const generics"), 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 da linguaxe estable, aínda que están implementadas no compilador e están agora implicados na biblioteca estándar para trazos 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 pasos que che permiten 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 (Orruxe usos LLVM como backend para xeración de código). Ao mesmo tempo, mantense a posibilidade de construír con LLVM máis antigas, ata a versión 8, pero por defecto (en rust-lang/llvm-project) está a usar agora LLVM 11. Espérase que LLVM 11 se publique 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 das API foi transferida á categoría estable, incluída a estabilizada
    Ident::new_raw,
    Range::est_empty,
    RangeInclusive::est_empty,
    Resultado::as_deref,
    Resultado::as_deref_mut,
    Vec::fuga,
    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 implicados toolkit de FreeBSD 11.4 (FreeBSD 10 non admite LLVM 11).

Fonte: opennet.ru

Engadir un comentario