Lansarea limbajului de programare Rust 1.63

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

  • S-a adăugat API-ul std::thread::scope, care vă permite să creați fire de execuție. Spre deosebire de firele disponibile anterior, noul API std::thread::scope permite transmiterea de date non-statice de împrumut, în timp ce firele create folosind API-ul clasic std::thread::spawn erau obligate să dețină toate argumentele transmise și nu puteau primi variabile împrumutate. API-ul std::thread::scope asigură că toate firele de execuție generate sunt terminate înainte ca datele să fie returnate, oferind securitate adecvată pentru mecanismul de împrumut.
  • Au fost propuse noi tipuri de wrapper pentru descriptorii de fișiere - BorrowedFd și OwnedFd, care oferă împrumut și proprietate. Tipurile sunt marcate cu „#[repr(transparent)]”, permițându-le să fie utilizate direct în legăturile C externe într-un mod conștient de proprietate.
  • Oferă posibilitatea de a apela Condvar::new, Mutex::new și RwLock::new în contextul constantelor pentru a crea valori globale statice Mutex, RwLock și Condvar fără a utiliza pachete lazy_static.
  • Pentru funcții precum fn foo (valoare: T, f: impl Copy) este permisă o sintaxă precum „foo::”. (32, 3)”, indicând în mod explicit tipul de generic.
  • Tranziția la utilizarea tehnicii NLL (Non-Lexical Lifetimes) pentru a identifica problemele cu variabilele de împrumut a fost finalizată. NLL ia în considerare la nivelul unui set de pointeri în graficul fluxului de execuție, ceea ce face posibilă creșterea calității verificării pentru variabilele de împrumut (verificatorul de împrumut) și permite executarea unor tipuri de cod corect, utilizarea de care anterior a dus la o eroare. Suportul pentru vechiul mecanism care folosea legarea pe durata de viață la nivel lexical a fost acum complet eliminat din rustc, iar utilizarea noului NLL a fost implementată pe tot parcursul.
  • 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:
    • array::from_fn
    • Box::into_pin
    • BinaryHeap::try_reserve
    • BinaryHeap::try_reserve_exact
    • OsString::try_reserve
    • OsString::try_reserve_exact
    • PathBuf::try_reserve
    • PathBuf::try_reserve_exact
    • Calea::try_exists
    • Ref::filter_map
    • RefMut::filter_map
    • NonNull::<[T]>::len
    • ToOwned::clone_into
    • Ipv6Addr::to_ipv4_mapped
    • unix::io::AsFd
    • unix::io::BorrowedFd<'fd>
    • unix::io::OwnedFd
    • windows::io::AsHandle
    • windows::io::BorrowedHandle

      Sursa: opennet.ru

Adauga un comentariu