Lansarea limbajului de programare Rust 1.47

A fost publicată versiunea 1.47 a limbajului de programare al sistemului Rust, fondat de proiectul Mozilla. Limbajul se concentrează pe siguranța memoriei, asigură gestionarea automată a memoriei și oferă mijloacele pentru a realiza paralelismul ridicat al sarcinilor fără a utiliza un colector de gunoi sau un timp de rulare (timpul de rulare este redus la inițializarea de bază și întreținerea 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. Pentru a distribui biblioteci, a asigura asamblarea și a gestiona dependențele, proiectul dezvoltă managerul de pachete Cargo. Depozitul crates.io este acceptat pentru găzduirea bibliotecilor.

Principalele inovații:

  • S-a implementat suport pentru trăsături pentru matrice de dimensiuni arbitrare. 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 const generice, a devenit posibilă definirea funcțiilor generice pentru orice dimensiune de matrice, dar acestea nu sunt încă incluse în caracteristicile stabile ale limbajului, deși sunt implementate în compilator și sunt acum utilizate în biblioteca standard. pentru tipuri 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 a fost scoasă în 23 de etape, dar acum va fi redusă la 3 etape, permițându-vă 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 se construi folosind LLVM 11 (Rust folosește LLVM ca backend pentru generarea de cod). În același timp, abilitatea de a construi cu LLVM vechi, până la versiunea 8, este păstrată, dar în mod implicit (în rust-lang/llvm-project) LLVM 11 este acum așteptată în viitor zile.
  • 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ă porțiune a API-ului a fost transferată în categoria stabilă, inclusiv stabilizat Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU și 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, se folosește setul de instrumente de la FreeBSD 11.4 (FreeBSD 10 nu acceptă LLVM 11).

Luat de la opennet.ru

Sursa: linux.org.ru

Adauga un comentariu