Lansarea limbajului de programare Rust 1.66

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

  • În enumerarea cu reprezentări întregi (atributul „#[repr(Int)]”, este permisă indicarea explicită a discriminantului (numărul variantei în enumerare), chiar dacă enumerarea conține câmpuri. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • S-a adăugat funcția core::hint::black_box care returnează pur și simplu valoarea primită. Deoarece compilatorul crede că această funcție face ceva, funcția black_box poate fi folosită pentru a dezactiva optimizările compilatorului pentru bucle atunci când efectuează testarea performanței codului sau când examinează codul generat de mașină (astfel încât compilatorul să nu considere codul nefolosit și să-l elimine). De exemplu, în exemplul de mai jos, black_box(v.as_ptr()) împiedică compilatorul să creadă că vectorul v nu este folosit. utilizați std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); cutie_neagră(v.as_ptr()); } }
  • Managerul de pachete „cargo” oferă comanda „remove”, care vă permite să eliminați dependențele din manifestul Cargo.toml din linia de comandă.
  • 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:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{primul, ultimul, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Adăugați implementări AsFd pentru tipurile de blocare stdio atunci când utilizați WASI.
    • impl TryFrom > pentru Box<[T; N]>
    • core::hint::black_box
    • Durata::try_from_secs_{f32,f64}
    • Opțiune::dezarhivați
    • std::os::fd
  • Intervalele „..X” și „..=X” sunt permise în șabloane.
  • La construirea front-end-ului compilatorului rustc și a backend-ului LLVM, modurile de optimizare LTO (Link Time Optimization) și BOLT (Binary Optimization and Layout Tool) sunt utilizate pentru a crește performanța codului rezultat și a reduce consumul de memorie.
  • S-a implementat suport de nivel 5 pentru platformele armv5te-none-eabi și thumbvXNUMXte-none-eabi. Al treilea nivel implică suport de bază, dar fără testare automată, publicarea versiunilor oficiale și verificarea capacității de a construi codul.
  • S-a adăugat suport pentru conectarea la bibliotecile generice macOS.

În plus, putem observa includerea în baza de cod GCC a compilatorului front-end al limbajului Rust (gccrs). Interfața este inclusă în ramura GCC 13, care va fi lansată în mai 2023. Începând cu GCC 13, setul de instrumente standard GCC va putea fi utilizat pentru a compila programe Rust fără a fi nevoie să instalați compilatorul rustc construit folosind dezvoltările LLVM. Implementarea Rust în GCC 13 va fi în stare beta, neactivată implicit.

Sursa: opennet.ru

Adauga un comentariu