Versió del llenguatge de programació Rust 1.47

publicat versió 1.47 del llenguatge de programació del sistema Rovell, fundada pel projecte Mozilla. El llenguatge se centra en la seguretat de la memòria, proporciona una gestió automàtica de la memòria i proporciona un mitjà per aconseguir un alt paral·lelisme de tasques sense utilitzar abocador и temps d'execució (el temps d'execució es redueix a la inicialització bàsica i el manteniment de la biblioteca estàndard).

La gestió automàtica de la memòria de Rust elimina els errors en manipular punters i protegeix dels problemes derivats de la manipulació de la memòria de baix nivell, com ara l'accés a una regió de memòria després d'haver-se alliberat, desreferències de punters nuls, desbordaments de memòria intermèdia, etc. S'està desenvolupant un gestor de paquets per distribuir biblioteques, assegurar el muntatge i gestionar les dependències pel projecte. Càrrega. S'admet un dipòsit per allotjar biblioteques caixes.io.

El principal innovacions:

  • Suport implementat per a tipus matrius mida arbitrària. Anteriorment, a causa de la incapacitat de definir funcions genèriques per a tots els valors enters, la biblioteca estàndard proporcionava suport de trets incorporat només per a matrius de fins a 32 elements de mida (els trets per a cada mida es definien estàticament). Gràcies a la creació de la funcionalitat de genèrics constants (“const genèrics”), va ser possible definir funcions genèriques per a qualsevol mida de matriu, però encara no s'inclouen a les característiques del llenguatge estable, tot i que estan implementades al compilador i ara. implicats a la biblioteca estàndard per a trets de matriu de qualsevol mida.

    Per exemple, la construcció següent a Rust 1.47 imprimirà el contingut d'una matriu, tot i que anteriorment hauria donat lloc a un error:

    fn principal() {
    sigui xs = [0; 34];

    println!("{:?}", xs);
    }

  • Sortida proporcionada de traces més curtes (traça posterior), sortida en situacions d'emergència. Els elements que no són d'interès en la majoria de situacions, però que desordenan la sortida i distreuen l'atenció de les causes primàries del problema, queden exclosos del rastre. Per retornar un rastre complet, podeu utilitzar la variable d'entorn "RUST_BACKTRACE=full". Per exemple, pel codi

    fn principal() {
    pànic!();
    }

    Anteriorment, el rastre es feia en 23 etapes, però ara es reduirà a
    3 passos que us permeten comprendre immediatament l'essència:

    El fil "main" va entrar en pànic a "pànic explícit", src/main.rs:2:5
    traça enrere de la pila:
    0: std::panicking::begin_panic
    a /rustc/d…d75a/library/std/src/panicking.rs:497
    1: pati::principal
    a ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    a /rustc/d…d75a/library/core/src/ops/function.rs:227

  • El compilador rustc s'ha actualitzat per construir-lo amb LLVM 11 (Rovell usos LLVM com a backend per a generació de codi). Al mateix temps, es manté la capacitat de construir amb LLVM més antics, fins a la versió 8, però per defecte (en rust-lang/llvm-project) ara utilitza LLVM 11. S'espera que LLVM 11 surti en els propers dies.
  • A la plataforma Windows, el compilador rustc proporciona suport per habilitar les comprovacions d'integritat del flux de control (Control Flow Guard), activat mitjançant la marca "-C control-flow-guard". En altres plataformes, aquesta bandera s'ignora ara per ara.
  • Una nova part de les API s'ha transferit a la categoria estable, inclosa la estabilitzada
    Ident::new_raw,
    Interval::és_buit,
    RangeInclusive::is_empty,
    Resultat::as_deref,
    Resultat::as_deref_mut,
    Vec::fuga,
    pointer::offset_from,
    f32::TAU i
    f64::TAU.

  • L'atribut "const", que determina la possibilitat d'utilitzar-lo en qualsevol context en lloc de constants, s'utilitza en els mètodes:
    • nou per a tots els nombres enters diferents de zero;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub i saturating_mul per a tots els nombres enters;
    • is_ascii_alphabétique, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace i is_ascii_control per als tipus char i u8.
  • Per a FreeBSD implicats kit d'eines de FreeBSD 11.4 (FreeBSD 10 no admet LLVM 11).

Font: opennet.ru

Afegeix comentari