Izdanje Rust programskog jezika 1.58

Objavljeno je izdanje općenamjenskog programskog jezika Rust 1.58, utemeljenog na projektu Mozilla, ali sada razvijenog pod pokroviteljstvom nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez korištenja skupljača smeća ili vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustovo automatsko upravljanje memorijom uklanja pogreške prilikom manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što je pristup memorijskoj regiji nakon što je oslobođena, dereferenciranje nultog pokazivača, prekoračenje međuspremnika, itd. Za distribuciju knjižnica, osiguranje sklapanja i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Glavne inovacije:

  • U blokovima za oblikovanje retka, uz prethodno dostupnu mogućnost zamjene varijabli eksplicitno navedenih iza retka brojem i imenom, implementirana je mogućnost zamjene proizvoljnih identifikatora dodavanjem izraza "{identifier}" u red. Na primjer: // Prethodno podržane konstrukcije: println!("Zdravo, {}!", get_person()); println!("Zdravo, {0}!", get_person()); println!("Zdravo, {osobo}!", osoba = get_person()); // sada možete navesti let person = get_person(); println!("Zdravo, {osoba}!");

    Identifikatori se također mogu odrediti izravno u opcijama oblikovanja. let (širina, preciznost) = get_format(); za (ime, rezultat) u get_scores() { println!("{ime}: {rezultat:width$.precision$}"); }

    Nova zamjena radi u svim makronaredbama koje podržavaju definiciju formata niza, s izuzetkom makronaredbe "panic!". u verzijama jezika Rust za 2015. i 2018., u kojima se panika!("{ident}") tretira kao uobičajeni niz (u Rustu 2021 zamjena funkcionira).

  • Ponašanje strukture std::process::Command na Windows platformi je promijenjeno tako da prilikom izvršavanja naredbi, iz sigurnosnih razloga, više ne traži izvršne datoteke u trenutnom direktoriju. Trenutačni direktorij je isključen jer bi se mogao koristiti za izvršavanje zlonamjernog koda ako se programi pokreću u nepouzdanim direktorijima (CVE-2021-3013). Nova logika otkrivanja izvršne datoteke uključuje pretraživanje Rust direktorija, direktorija aplikacije, direktorija sustava Windows i direktorija navedenih u varijabli okruženja PATH.
  • Standardna biblioteka je proširila broj funkcija označenih s "#[must_use]" za izdavanje upozorenja ako se povratna vrijednost zanemari, što pomaže identificirati pogreške uzrokovane pretpostavkom da će funkcija promijeniti vrijednosti umjesto da vrati novu vrijednost.
  • Novi dio API-ja premješten je u kategoriju stabilnih, uključujući metode i implementacije karakteristika koje su stabilizirane:
    • Metapodaci::is_symlink
    • Put::je_symlink
    • {integer}::saturating_div
    • Opcija::unwrap_unchecked
    • Rezultat::unwrap_unchecked
    • Rezultat::unwrap_err_unchecked
  • Atribut "const", koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkcijama:
    • Trajanje::novo
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Trajanje::saturating_mul
    • Duration::checked_div
  • Dopušteno dereferenciranje pokazivača "*const T" u kontekstima "const".
  • U upravitelju paketa Cargo polje rust_version dodano je metapodacima paketa, a opcija “--message-format” dodana je naredbi “cargo install”.
  • Kompajler implementira podršku za zaštitni mehanizam CFI (Control Flow Integrity), koji dodaje provjere prije svakog neizravnog poziva kako bi otkrio neke oblike nedefiniranog ponašanja koji bi potencijalno mogli dovesti do kršenja normalnog redoslijeda izvršavanja (kontrolnog toka) kao rezultat korištenje eksploatacija koje mijenjaju pokazivače pohranjene u memoriji na funkcije.
  • Kompajler je dodao podršku za verzije 5 i 6 formata usporedbe pokrivenosti LLVM, koji se koristi za procjenu pokrivenosti koda tijekom testiranja.
  • U kompajleru su zahtjevi za minimalnu verziju LLVM podignuti na LLVM 12.
  • Implementirana je treća razina podrške za platformu x86_64-unknown-none. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja, objavljivanja službenih međugradnji ili provjere može li se kod izgraditi.

Osim toga, možemo primijetiti da je Microsoft objavio izdanje biblioteka Rust za Windows 0.30, koje vam omogućuju korištenje Rust jezika za razvoj aplikacija za Windows OS. Set uključuje dva crate paketa (windows i windows-sys), preko kojih možete pristupiti Win API-ju u Rust programima. Kod za API podršku generira se dinamički iz metapodataka koji opisuju API, što vam omogućuje implementaciju podrške ne samo za postojeće Win API pozive, već i za pozive koji će se pojaviti u budućnosti. Nova verzija dodaje podršku za ciljnu platformu UWP (Universal Windows Platform) i implementira tipove Handle i Debug.

Izvor: opennet.ru

Dodajte komentar