Linguaxe de programación Rust versión 1.73

Publicouse o lanzamento da linguaxe de programación de propósito xeral Rust 1.73, 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:

  • Rediseñouse o formato das mensaxes emitidas polo controlador de fallos do programa predeterminado (pánico). O texto especificado na macro "pánico!" agora móstrase nunha liña separada sen comiñas, o que facilita a lectura da mensaxe e elimina a confusión cando hai comiñas aniñadas ou se dividen en varias liñas. fn main() { let file = "ferris.txt"; pánico! ("¡Oh non! {arquivo:?} non se atopou!"); } Houbo un fío "principal" en pánico ao "oh non! Non se atopou "ferris.txt"!', src/main.rs:3:5 O fío 'main' entrou en pánico en src/main.rs:3:5: oh non! "ferris.txt" non se atopou!

    Tamén se modificou a saída das mensaxes que se mostran cando se activan as macros "assert_eq" e "assert_ne". fn main() { assert_eq!("🦀", "🐟", "ferris non é un peixe"); } Houbo un fío "principal" en pánico ante "a afirmación fallou: `(esquerda == dereita)` esquerda: `"🦀"`, dereita: `"🐟"`: ferris non é un peixe', src/main.rs: 2 :5 O fío 'principal' entrou en pánico en src/main.rs:2:5: fallou a afirmación `left == right': ferris non é un peixe esquerda: “🦀” dereita: “🐟”

  • De acordo co RFC 3184, engadiuse a capacidade de manipular directamente as claves de almacenamento LocalKey de fío local (thread_local). > e LocalKey > mediante o uso dos métodos get(), set(), take() e replace(), en lugar de usar un peche "con(|inner| ...)", o que elimina a necesidade de realizar código de inicialización adicional para o valores predeterminados especificados para novos fíos cando se usa a macro "thread_local!" thread_local! { COUSAS static: Cell > = Cell::new(Vec::new()); } fn f() { // era COUSAS.con(|i| i.set(vec![32, 1, 2])); // converteuse en COUSAS.set(vec![3, 1, 2]); // ... // deixouse v = COUSAS.con(|i| i.tomar()); // converteuse en let v: Vec = COUSAS.tomar(); }
  • Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
    • {entero} sen asinar::div_ceil
    • {entero} sen asinar::next_multiple_of
    • {entero} sen asinar::checked_next_multiple_of
    • std::ffi::FromBytesUntilNulError
    • std::os::unix::fs::chown
    • std::os::unix::fs::fchown
    • std::os::unix::fs::lfchown
    • LocalKey:: >::conseguir
    • LocalKey:: >::conxunto
    • LocalKey:: >::tomar
    • LocalKey:: >::substituír
    • LocalKey:: >::con_prestado
    • LocalKey:: >::with_borrow_mut
    • LocalKey:: >::conxunto
    • LocalKey:: >::tomar
    • LocalKey:: >::substituír
  • O atributo "const", que determina a posibilidade de usalo en calquera contexto en lugar de constantes, úsase nas funcións:
    • rc::Débil::novo
    • sincronización::Débil::novo
    • NonNull::as_ref
  • O compilador proporciona a gravación da información da versión na sección ".comment", similar a GCC e Clang.
  • Implementouse o terceiro nivel de soporte para as plataformas aarch64-unknown-teeos, csky-unknown-linux-gnuabiv2, riscv64-linux-android, riscv64gc-unknown-hermit, x86_64-unikraft-linux-musl e x86_64-unknown-linux -ohos. O terceiro nivel implica soporte básico, pero sen probas automatizadas, publicación de compilacións oficiais ou comprobar se o código se pode construír.
  • Implementouse o segundo nivel de soporte para a plataforma de destino wasm32-wasi-preview1-threads. O segundo nivel de apoio implica unha garantía de montaxe.

Fonte: opennet.ru

Engadir un comentario