Lansarea limbajului de programare Rust 1.34

a avut loc lansarea limbajului de programare a sistemului Rugina 1.34, dezvoltat de proiectul Mozilla. Limbajul se concentrează pe siguranța memoriei, oferă o gestionare automată a memoriei și oferă un mijloc de a obține un paralelism ridicat al sarcinilor fără a utiliza un colector de gunoi sau un timp de rulare.

Gestionarea automată a memoriei Rust eliberează dezvoltatorul de manipularea pointerului și protejează împotriva problemelor care decurg din manipularea memoriei de nivel scăzut, cum ar fi accesările la memorie după eliberarea, dereferențele pointerului nul, depășirile de buffer și altele asemenea. Se dezvoltă un manager de pachete pentru a distribui biblioteci, a asigura asamblarea și a gestiona dependențele de către proiect. încărcătură, permițându-vă să obțineți bibliotecile necesare pentru program cu un singur clic. Un depozit este acceptat pentru a găzdui biblioteci lăzi.io.

Principalul inovații:

  • Managerul de pachete Cargo a adăugat instrumente pentru a lucra cu registre de pachete alternative care pot coexista cu registrul public crates.io. De exemplu, dezvoltatorii de aplicații proprietare își pot folosi acum propriul registru privat, care poate fi folosit atunci când listează dependențe în Cargo.toml și pot aplica un model de versiuni similar cu crates.io pentru produsele lor, precum și să trimită dependențe la ambele lăzi. io și în propriul registru.

    Pentru a adăuga registre externe la .cargo/config (situat în $HOME sau în directorul pachetului)
    furnizate secțiunea „[registruri]”, iar pentru a utiliza un registru extern, opțiunea „registru” a apărut în descrierea fiecărei dependențe din Cargo.toml. Pentru a vă conecta la un registru suplimentar, plasați pur și simplu simbolul de autentificare în fișierul ~/.cargo/credentials și rulați comanda
    "cargo login --registry=my-registry" și pentru a publica un pachet -
    „cargo publish -registry=registrul-meu”;

  • S-a adăugat suport complet pentru utilizarea operatorului „?”. în teste doctestele, permițându-vă să utilizați exemplu de cod din documentație ca teste. Anterior operator
    "?" ar putea fi folosit pentru a gestiona erorile în timpul executării testului numai în prezența funcției „fn main()” sau în funcțiile „#[test]”;

  • În atributele personalizate definite folosind macrocomenzi procedurale asigurat capacitatea de a folosi seturi arbitrare de jetoane (“#[attr($tokens)]”, „#[attr[$tokens]] și #[attr{$tokens}]”). Anterior, elementele puteau fi specificate doar într-o formă arborescentă/recursivă folosind literale șir, de exemplu „#[foo(bar, baz(quux, foo = “bar”)]”, dar acum este posibil să se utilizeze enumerari (' #[range(0. .10)]') și construcții precum „#[bound(T: MyTrait)]”;
  • Tipuri stabilizate (trăsătură) Încercați de la и TryInto, permițând conversii de tip cu gestionarea erorilor. De exemplu, metode precum from_be_bytes cu tipuri întregi folosesc matrice ca intrare, dar datele vin adesea într-un tip Slice, iar conversia între matrice și felii este problematică de făcut manual. Cu ajutorul unor trăsături noi, operația specificată poate fi efectuată din mers printr-un apel către .try_into(), de exemplu, „let num = u32::from_be_bytes(slice.try_into()?)”. Pentru conversiile care reușesc întotdeauna (de exemplu, de la tipul u8 la u32), a fost adăugat un tip de eroare Infailibil, permițând utilizarea transparentă
    TryFrom pentru toate implementările existente ale „From”;

  • Funcția a fost depreciată CommandExt::before_exec, care a permis ca un handler să fie executat înainte de a rula exec, care a fost executat în contextul unui proces copil bifurcat după apelul fork(). În astfel de condiții, unele resurse ale procesului părinte, cum ar fi descriptorii de fișiere și zonele de memorie mapate, ar putea fi duplicate, ceea ce ar putea duce la un comportament nedefinit și la funcționarea incorectă a bibliotecilor.
    Este recomandat să utilizați o funcție nesigură în loc de before_exec CommandExt::pre_exec.

  • Tipuri de numere întregi atomice stabilizate, semnate și nesemnate, cu dimensiuni cuprinse între 8 și 64 de biți (de exemplu, AtomicU8), precum și tipurile semnate NonZeroI[8|16|32|64|128].
  • O nouă porțiune a API-ului a fost mutată în categoria stabilă, inclusiv Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] și metodele SystemTime au fost stabilizate ::checked_[add|sub]. Funcțiile iter::from_fn și iter::successors au fost stabilizate;
  • Pentru toate tipurile de numere întregi sunt implementate metodele checked_pow, saturating_pow, wrapping_pow și overflowing_pow;
  • S-a adăugat posibilitatea de a activa optimizările în etapa de conectare prin specificarea opțiunii de construire „-C linker-plugin-lto”.

Sursa: opennet.ru

Adauga un comentariu