Lansarea limbajului de programare Rust 1.61

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

  • Este posibil să vă definiți propriile coduri de returnare din funcția principală. Inițial, funcția principală a lui Rust putea returna doar tipul „()” (unitate), care indica întotdeauna o stare de ieșire reușită, cu excepția cazului în care dezvoltatorul a numit în mod explicit funcția „process::exit(code)”. În Rust 1.26, folosind trăsătura de terminare instabilă în funcția principală, a fost posibil să se returneze valorile „Ok” și „Err”, corespunzătoare codurilor EXIT_SUCCESS și EXIT_FAILURE din programele C. În Rust 1.61, trăsătura Termination a fost stabilită și un tip separat ExitCode a fost propus pentru a reprezenta un cod de returnare specific, care retrage tipurile de returnare specifice platformei, furnizând atât constantele predefinite SUCCESS și FAILURE, cât și metoda From. pentru a returna un cod de retur personalizat. utilizați std::process::ExitCode; fn main() -> ExitCode { if !check_foo() { return ExitCode::from(8); } ExitCode::SUCCESS }
  • Au fost stabilizate capacități suplimentare ale funcțiilor definite folosind expresia „const fn”, care pot fi numite nu numai ca funcții obișnuite, ci și utilizate în orice context în loc de constante. Aceste funcții sunt calculate în timpul compilării, nu în timpul execuției, deci sunt supuse anumitor restricții, cum ar fi capacitatea de a citi numai din constante. În noua versiune, operațiunile de bază cu pointeri de funcție sunt permise în interiorul funcțiilor const (este permisă crearea, trecerea și turnarea de pointeri, dar nu apelarea unei funcție cu pointer); limite de trăsătură pentru parametrii generici ai funcțiilor const, cum ar fi T: Copy; trăsături dispecerabile dinamic (trăsătură dyn); impl Tipuri de trăsături pentru argumentele funcției și valorile returnate.
  • Fluxul gestionează Stdin, Stdout și Stderr în std::io acum are o durată de viață statică ("'static") atunci când este blocat, permițând constructe precum "let out = std::io::stdout().lock();" cu obținerea unui mâner și fixarea unui lacăt într-o singură expresie.
  • 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:
    • Pin::static_mut
    • Pin::static_ref
    • Vec::retain_mut
    • VecDeque::retain_mut
    • Scrie pentru Cursor<[u8; N]>
    • std::os::unix::net::SocketAddr::from_pathname
    • std::process::ExitCode
    • std::proces::Terminare
    • std::thread::JoinHandle::is_terminat
  • Atributul „const”, care determină posibilitatea utilizării lui în orice context în loc de constante, este utilizat în funcțiile:
    • <*const T>::offset și <*mut T>::offset
    • <*const T>::wrapping_offset și <*mut T>::wrapping_offset
    • <*const T>::add și <*mut T>::add
    • <*const T>::sub și <*mut T>::sub
    • <*const T>::wrapping_add și <*mut T>::wrapping_add
    • <*const T>::wrapping_sub și <*mut T>::wrapping_sub
    • <[T]>::as_mut_ptr
    • <[T]>::as_ptr_range
    • <[T]>::as_mut_ptr_range

În plus, puteți nota articolul „Rust: A Critical Retrospective” cu un rezumat al impresiilor limbajului Rust după ce ați scris 100 de mii de linii de cod în el în timpul dezvoltării sistemului de operare Xous microkernel utilizat în firmware. Dezavantajele includ sintaxa dificil de înțeles, incompletitudinea și dezvoltarea continuă a limbajului, lipsa versiunilor repetabile, probleme tipice cu încrederea în dependență în Crates.io și nevoia de a menține o anumită disciplină pentru a scrie cod securizat. Caracteristicile care au depășit așteptările includ instrumente pentru refactorizarea codului și „hack-uri” de reelaborare adăugate în timpul prototipării rapide.

Sursa: opennet.ru

Adauga un comentariu