Lansarea limbajului de programare Rust 1.57

A fost publicată lansarea limbajului de programare Rust 1.57, fondat de proiectul Mozilla, dar dezvoltat acum sub auspiciile organizației independente non-profit Rust Foundation. 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:

  • Utilizarea macrocomenzii „panică!” a fost stabilizată. în contexte create în timpul compilării, cum ar fi declarațiile „const fn”. În plus, pe lângă utilizarea „panic!” Declarațiile const permit utilizarea macrocomenzii „assert!”. și alte alte API-uri de bibliotecă standard. Stabilizarea nu acoperă încă întreaga infrastructură de formatare, așa că în forma sa actuală macro-ul „panică!” poate fi folosit numai cu șiruri statice (panic!(“...”)) sau cu o singură valoare interpolată „&str” la înlocuire (panic!(”{}”, a)), care ar trebui limitată la înlocuirea „{ }" fără specificatori de formatare și alte tipuri. În viitor, aplicabilitatea macrocomenzilor în contexte constante va fi extinsă, dar capacitățile stabilizate sunt deja suficiente pentru a efectua verificări de aserți în etapa de compilare: const _: () = assert!(std::mem::size_of::() == 64); const _: () = assert!(std::mem::size_of::() == 8);
  • Managerul de pachete Cargo permite utilizarea profilurilor cu nume arbitrare, fără a se limita la „dev”, „release”, „test” și „bench”. De exemplu, pentru a activa optimizarea în etapa de conectare (LTO) numai atunci când sunt generate ansamblurile finale de produs, puteți crea un profil de „producție” în Cargo.toml și puteți adăuga indicatorul „lto = true”. Cu toate acestea, atunci când definiți propriile profiluri, trebuie să specificați un profil existent pentru a moșteni setările implicite de la acesta. Exemplul de mai jos creează un profil de „producție” care completează profilul „lansare” prin includerea indicatorului „lto = true”. Profilul în sine este activat prin apelarea încărcăturii cu opțiunea „--profile production”, iar artefactele de asamblare vor fi plasate în directorul „țintă/producție”. [profile.production] moștenește = „eliberare” lto = adevărat
  • Utilizarea try_reserve pentru tipurile Vec, String, HashMap, HashSet și VecDeque a fost stabilizată, ceea ce vă permite să rezervați spațiu în avans pentru un anumit număr de elemente de un anumit tip pentru a reduce frecvența operațiunilor de alocare a memoriei și pentru a evita se blochează în timpul funcționării din cauza lipsei de memorie.
  • Este permisă specificarea macrocomenzilor cu acolade în expresii precum „m!{ .. }.method()” și „m!{ .. }?”.
  • Execuția funcțiilor File::read_to_end și read_to_string a fost optimizată.
  • Suportul pentru specificația Unicode a fost actualizat la versiunea 14.0.
  • S-a extins numărul de funcții marcate cu „#[must_use]” pentru a emite un avertisment în cazul în care valoarea returnată este ignorată, ceea ce ajută la identificarea erorilor cauzate de presupunerea că o funcție va modifica valorile în loc să returneze o nouă valoare.
  • S-a adăugat un backend experimental pentru generarea de cod folosind libgccjit.
  • O nouă porțiune a API-ului a fost mutată în categoria de stabil, inclusiv metodele și implementările de trăsături au fost stabilizate:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • colecții::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::este_disponibil
    • Command::get_program
    • Comanda::get_args
    • Command::get_envs
    • Comanda::get_current_dir
    • CommandArgs
    • CommandEnvs
  • Atributul „const”, care determină dacă poate fi utilizat în orice context în loc de constante, este utilizat în funcția hint::unreachable_unchecked.
  • Al treilea nivel de suport a fost implementat pentru armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi și armv7a-kmc- platformele solid_asp3-eabihf. Al treilea nivel implică suport de bază, dar fără testare automată, publicarea versiunilor oficiale sau verificarea dacă codul poate fi construit.

Sursa: opennet.ru

Adauga un comentariu