Lansarea limbajului de programare Rust 1.60

A fost publicată lansarea limbajului de programare de uz general Rust 1.60, fondat de proiectul Mozilla, dar dezvoltat acum sub auspiciile organizației independente non-profit Rust Foundation. Limbajul se concentrează pe siguranța memoriei și oferă mijloacele pentru a obține un paralelism ridicat al jobului, evitând în același timp utilizarea unui colector de gunoi și a unui timp de rulare (timpul de rulare este redus la inițializarea de bază și întreținerea bibliotecii standard).

Metodele de manipulare a memoriei Rust salvează dezvoltatorul de erori la manipularea pointerilor și protejează împotriva problemelor care apar din cauza manipulării memoriei de nivel scăzut, cum ar fi accesarea unei zone de memorie după ce aceasta a fost eliberată, dereferențiarea pointerilor nuli, depășirile de buffer etc. Pentru a distribui biblioteci, a furniza versiuni și a gestiona dependențe, proiectul dezvoltă managerul de pachete Cargo. Depozitul crates.io este acceptat pentru găzduirea bibliotecilor.

Siguranța memoriei este furnizată în Rust în timpul compilării prin verificarea referințelor, urmărirea proprietății obiectului, urmărirea duratelor de viață a obiectelor (sfere de aplicare) și evaluarea corectitudinii accesului la memorie în timpul execuției codului. Rust oferă, de asemenea, protecție împotriva depășirilor de numere întregi, necesită inițializarea obligatorie a valorilor variabilelor înainte de utilizare, gestionează mai bine erorile în biblioteca standard, aplică implicit conceptul de referințe imuabile și variabile, oferă tastare statică puternică pentru a minimiza erorile logice.

Principalele inovații:

  • Compilatorul rustc are un sistem stabilizat bazat pe LLVM pentru generarea datelor de acoperire utilizate pentru a evalua acoperirea codului în timpul testării. Pentru a activa datele de acoperire în timpul asamblarii, trebuie să utilizați indicatorul „-Cinstrument-coverage”, de exemplu, pornind asamblarea cu comanda „RUSTFLAGS="-C instrument-coverage” cargo build”. După rularea fișierului executabil compilat în acest fel, fișierul default.proraw va fi salvat în directorul curent, pentru procesare pe care îl puteți folosi utilitarul llvm-profdata din componenta llvm-tools-preview. Ieșirea procesată de llvm-profdata poate fi apoi transmisă la llvm-cov pentru a genera un raport adnotat de acoperire a codului. Informațiile despre legătura către codul sursă sunt preluate din fișierul executabil examinat, care include datele necesare despre legătura dintre contoarele de acoperire și cod. 1| 1|fn principal() { 2| 1| println!("Bună, lume!"); 3| 1|}
  • În managerul de pachete de marfă, suportul pentru steagul „-timings” a fost stabilizat, ceea ce include generarea unui raport detaliat privind progresul construcției și timpul de execuție al fiecărui pas. Raportul poate fi util pentru optimizarea performanței procesului de asamblare.
  • Managerul de pachete cargo oferă o nouă sintaxă pentru mecanismul de compilare condiționată și selectare a dependențelor opționale, configurată în fișierul Cargo.toml prin listarea unei liste de proprietăți denumite în secțiunea [funcții] și activată prin activarea proprietăților în timpul construirii pachetului folosind indicatorul „--features”. Noua versiune adaugă suport pentru dependențe în spații de nume separate și dependențe slabe.

    În primul caz, este posibil să folosiți elemente cu prefixul „dep:” în interiorul secțiunii „[features]” pentru a face legătura explicit la o dependență opțională, fără a reprezenta implicit această dependență ca o caracteristică. În al doilea caz, a fost adăugat suport pentru marcarea cu semnul „?”. („nume-pachet?/nume-funcție”) dependențe opționale care ar trebui incluse numai dacă o altă proprietate include dependența opțională dată. De exemplu, în exemplul de mai jos, activarea proprietății serde va activa dependența „serde”, precum și proprietatea „serde” pentru dependența „rgb”, dar numai dacă dependența „rgb” este activată în altă parte: [dependencies] serde = { versiunea = " 1.0.133", opțional = adevărat } rgb = { versiunea = "0.8.25", opțional = adevărat } [funcții] serde = ["dep:serde", "rgb?/serde"]

  • A fost returnat suportul pentru compilarea incrementală, care a fost dezactivată în ultima versiune. Eroarea compilatorului care a cauzat dezactivarea caracteristicii a fost rezolvată.
  • S-au rezolvat unele probleme legate de furnizarea temporizatoarelor Instant cu o garanție de sincronizare monotonă, care ține cont de timpul petrecut de sistem în modul de repaus. Anterior, OS API era folosit ori de câte ori era posibil pentru a opera cronometrul, care nu ținea cont de situațiile problematice care rup monotonia timpului, precum problemele hardware, utilizarea virtualizării sau erorile în sistemul de operare.
  • 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:
    • Arc::nou_ciclic
    • Rc::nou_ciclic
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • PoateUninit::assume_init_drop
    • PoateUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • use::abs_diff
    • Afișare pentru io::ErrorKind
    • De la pentru ExitCode
    • Nu pentru ! (tastați „niciodată”)
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Al treilea nivel de suport a fost implementat pentru platformele mips64-openwrt-linux-musl* și armv7-unknown-linux-uclibceabi (softfloat). Al treilea nivel implică suport de bază, dar fără testare automată, publicarea versiunilor oficiale sau verificarea dacă codul poate fi construit.
  • Compilatorul a fost schimbat pentru a utiliza LLVM 14.

În plus, puteți observa:

  • S-a adăugat suport pentru bootstrapping-ul compilatorului rustc folosind backend-ul rustc_codegen_gcc, care vă permite să utilizați biblioteca libgccjit din proiectul GCC ca generator de cod în rustc, ceea ce permite rustc să ofere suport pentru arhitecturile și optimizările disponibile în GCC. Promovarea compilatorului înseamnă abilitatea de a utiliza un generator de cod bazat pe GCC în rustc pentru a construi compilatorul rustc în sine. Din punct de vedere practic, această caracteristică vă permite să construiți programe rust pentru arhitecturi care nu erau suportate anterior în rustc.
  • Este disponibilă lansarea setului de instrumente uutils coreutils 0.0.13, în cadrul căruia este dezvoltat un analog al pachetului GNU Coreutils, rescris în limbajul Rust. Coreutils vine cu peste o sută de utilități, inclusiv sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln și ls. Scopul proiectului este de a crea o implementare alternativă multiplatformă a Coreutils, capabilă să ruleze pe platformele Windows, Redox și Fuchsia, precum și distribuție sub licența permisivă MIT, în locul licenței copyleft GPL.

    Noua versiune a îmbunătățit implementările multor utilitare, inclusiv compatibilitatea îmbunătățită semnificativ a utilitaților cp, dd, df, split și tr cu omologii lor din proiectul GNU. Documentație online furnizată. Analizorul clap este folosit pentru a analiza argumentele liniei de comandă, ceea ce a îmbunătățit rezultatul pentru marcajul „--help” și a adăugat suport pentru abrevierile comenzilor lungi (de exemplu, puteți specifica „ls -col” în loc de „ls -color". ”).

Sursa: opennet.ru

Adauga un comentariu