Lansarea limbajului de programare Rust 1.47

publicat versiunea 1.47 a limbajului de programare a sistemului Rugină, fondată de proiectul Mozilla. Limbajul se concentrează pe siguranța memoriei, oferă gestionarea automată a memoriei și oferă un mijloc de a obține un paralelism ridicat al sarcinilor fără a utiliza colector de gunoi и Runtime (timpul de rulare se rezumă la inițializarea și întreținerea de bază a bibliotecii standard).

Gestionarea automată a memoriei de la Rust elimină erorile la manipularea pointerilor și protejează împotriva problemelor care decurg din manipularea memoriei de nivel scăzut, cum ar fi accesarea unei regiuni de memorie după ce aceasta a fost eliberată, dereferențele pointerului nul, depășirile de buffer etc. Se dezvoltă un manager de pachete pentru a distribui biblioteci, a asigura asamblarea și a gestiona dependențele de către proiect. încărcătură. Un depozit este acceptat pentru a găzdui biblioteci lăzi.io.

Principalul inovații:

  • S-a implementat suport pentru tipuri matrice orice marime. Anterior, din cauza incapacității de a defini funcții generice pentru toate valorile întregi, biblioteca standard a oferit suport încorporat pentru trăsături doar pentru matrice de până la 32 de elemente (trăsăturile pentru fiecare dimensiune au fost definite static). Datorită creării funcționalității genericelor constante („const generice”), a devenit posibilă definirea funcțiilor generice pentru orice dimensiune de matrice, dar acestea nu sunt încă incluse în caracteristicile limbajului stabil, deși sunt implementate în compilator și sunt acum implicat în biblioteca standard pentru trăsături de matrice de orice dimensiune.

    De exemplu, următoarea construcție din Rust 1.47 va tipări conținutul unui tablou, deși anterior ar fi dus la o eroare:

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

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

  • Furnizat ieșire de urme mai scurte (backtrace), ieșire în situații de urgență. Elementele care nu sunt de interes în cele mai multe situații, dar care aglomera producția și distrag atenția de la cauzele primare ale problemei, sunt excluse din urmă. Pentru a returna o urmă completă, puteți utiliza variabila de mediu „RUST_BACKTRACE=full”. De exemplu, pentru cod

    fn principal() {
    panică!();
    }

    Anterior, urma era scoasă în 23 de etape, dar acum se va reduce la
    3 pași care vă permit să înțelegeți imediat esența:

    firul „principal” a intrat în panică la „panica explicită”, src/main.rs:2:5
    stiva înapoi:
    0: std::panicking::begin_panic
    la /rustc/d…d75a/library/std/src/panicking.rs:497
    1: loc de joaca::principal
    la ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    la /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Compilatorul rustc a fost actualizat pentru a construi folosind LLVM 11 (Rugini utilizări LLVM ca backend pentru generarea codului). În același timp, capacitatea de a construi cu LLVM-uri mai vechi, până la versiunea 8, este păstrată, dar implicit (în rust-lang/llvm-project) utilizează acum LLVM 11. LLVM 11 este de așteptat să fie lansat în zilele următoare.
  • Pe platforma Windows, compilatorul rustc oferă suport pentru activarea verificărilor de integritate a fluxului de control (Control Flow Guard), activat folosind indicatorul „-C control-flow-guard”. Pe alte platforme acest steag este ignorat pentru moment.
  • O nouă parte a API-urilor a fost transferată în categoria stabilă, inclusiv stabilizat
    Ident::new_raw,
    Range::is_empty,
    RangeInclusive::is_empty,
    Rezultat::as_deref,
    Rezultat::as_deref_mut,
    Vec::scurgere,
    pointer::offset_from,
    f32::TAU si
    f64::TAU.

  • Atributul „const”, care determină posibilitatea utilizării lui în orice context în loc de constante, este utilizat în metodele:
    • nou pentru toate numerele întregi, altele decât zero;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub și saturating_mul pentru toate numerele întregi;
    • is_ascii_alphabetic, 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 pentru tipurile char și u8.
  • Pentru FreeBSD implicat trusa de instrumente de la FreeBSD 11.4 (FreeBSD 10 nu acceptă LLVM 11).

Sursa: opennet.ru

Adauga un comentariu