Lansarea limbajului de programare Rust 1.58

A fost publicată lansarea limbajului de programare de uz general Rust 1.58, 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 de sarcini 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:

  • În blocurile de formatare a liniilor, pe lângă capacitatea disponibilă anterior de a înlocui variabilele enumerate în mod explicit după o linie după număr și nume, este implementată capacitatea de a înlocui identificatori arbitrari prin adăugarea expresiei „{identificator}” la linie. De exemplu: // Construcții suportate anterior: println!("Bună ziua, {}!", get_person()); println!("Bună ziua, {0}!", get_person()); println!("Buna ziua, {persoana}!", person = get_person()); // acum puteți specifica let person = get_person(); println!("Bună ziua, {persoană}!");

    De asemenea, identificatorii pot fi specificați direct în opțiunile de formatare. let (lățime, precizie) = get_format(); pentru (nume, scor) în get_scores() { println!("{name}: {score:width$.precision$}"); }

    Noua înlocuire funcționează în toate macrocomenzile care acceptă definirea formatului șirului, cu excepția macrocomenzii „panic!”. în versiunile din 2015 și 2018 ale limbajului Rust, în care panica! ("{ident}") este tratată ca un șir obișnuit (în Rust 2021 înlocuirea funcționează).

  • Comportamentul std::process::structurii de comandă pe platforma Windows a fost modificat astfel încât la executarea comenzilor, din motive de securitate, nu mai caută fișiere executabile în directorul curent. Directorul curent este exclus deoarece ar putea fi folosit pentru a executa cod rău intenționat dacă programele sunt executate în directoare nede încredere (CVE-2021-3013). Noua logică de detectare a executabilului implică căutarea în directoarele Rust, în directorul aplicației, în directorul de sistem Windows și în directoarele specificate în variabila de mediu PATH.
  • Biblioteca standard 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 schimba valorile în loc să returneze o nouă valoare.
  • 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:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Opțiune::unwrap_unchecked
    • Rezultat::unwrap_unchecked
    • Rezultat::unwrap_err_unchecked
  • Atributul „const”, care determină posibilitatea utilizării lui în orice context în loc de constante, este utilizat în funcțiile:
    • Durata::nou
    • Duration::checked_add
    • Durata::saturating_add
    • Duration::checked_sub
    • Durata::saturating_sub
    • Duration::checked_mul
    • Durata::saturating_mul
    • Durata::checked_div
  • Dereferențiarea permisă a indicatorilor „*const T” în contexte „const”.
  • În managerul de pachete Cargo, câmpul rust_version a fost adăugat la metadatele pachetului, iar opțiunea „--message-format” a fost adăugată la comanda „cargo install”.
  • Compilatorul implementează suport pentru mecanismul de protecție CFI (Control Flow Integrity), care adaugă verificări înainte de fiecare apel indirect pentru a detecta unele forme de comportament nedefinit care ar putea duce la o încălcare a ordinii normale de execuție (flux de control) ca urmare a utilizarea exploit-urilor care schimbă pointerii stocați în memorie pe funcții.
  • Compilatorul a adăugat suport pentru versiunile 5 și 6 ale formatului de comparare a acoperirii LLVM, folosit pentru a evalua acoperirea codului în timpul testării.
  • În compilator, cerințele pentru versiunea minimă a LLVM sunt ridicate la LLVM 12.
  • Al treilea nivel de suport pentru platforma x86_64-unknown-none a fost implementat. Al treilea nivel implică suport de bază, dar fără testare automată, publicarea versiunilor oficiale sau verificarea dacă codul poate fi construit.

În plus, putem observa publicarea de către Microsoft a lansării bibliotecilor Rust pentru Windows 0.30, care vă permit să utilizați limbajul Rust pentru a dezvolta aplicații pentru sistemul de operare Windows. Setul include două pachete crate (windows și windows-sys), prin care puteți accesa API-ul Win în programele Rust. Codul pentru suportul API este generat dinamic din metadatele care descriu API-ul, ceea ce vă permite să implementați suport nu numai pentru apelurile Win API existente, ci și pentru apelurile care vor apărea în viitor. Noua versiune adaugă suport pentru platforma țintă UWP (Universal Windows Platform) și implementează tipurile Handle și Debug.

Sursa: opennet.ru

Adauga un comentariu