Programski jezik Rust 1.58 izdanje

Objavljeno je izdanje programskog jezika opšte namene Rust 1.58, koji je osnovao Mozilla projekat, a sada je razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije, obezbjeđuje automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća ili vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rust-ovo automatsko upravljanje memorijom spašava programere od grešaka prilikom manipulacije pokazivačima i štiti od problema koji nastaju zbog manipulacije memorijom niskog nivoa, kao što je pristup memorijskom području nakon što je oslobođeno, dereferenciranje nultih pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, izradu i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Glavne inovacije:

  • U blokovima za formatiranje reda, pored ranije dostupne mogućnosti zamjene varijabli eksplicitno navedenih nakon reda 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, {osoba}!", person = get_person()); // sada možete specificirati let person = get_person(); println!("Zdravo, {osoba}!");

    Identifikatori se također mogu specificirati direktno u opcijama formatiranja. let (širina, preciznost) = get_format(); for (ime, rezultat) u get_scores() { println!("{name}: {score:width$.precision$}"); }

    Nova zamjena radi u svim makroima koji podržavaju definiciju formata niza, s izuzetkom "makroa panike!" u verzijama Rust jezika iz 2015. i 2018., u kojem se panika!("{ident}") tretira kao običan niz (u Rustu 2021 zamjena radi).

  • 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. Trenutni 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, Windows sistemskog direktorija i direktorija navedenih u PATH varijabli okruženja.
  • Standardna biblioteka je proširila broj funkcija označenih sa "#[must_use]" kako bi izdala upozorenje ako se povratna vrijednost zanemari, što pomaže u identifikaciji grešaka uzrokovanih pretpostavkom da će funkcija promijeniti vrijednosti umjesto da vraća novu vrijednost.
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
    • Metapodaci::is_symlink
    • Put::is_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
    • Trajanje::checked_add
    • Duration::saturating_add
    • Trajanje::checked_sub
    • Duration::saturating_sub
    • Trajanje::checked_mul
    • Duration::saturating_mul
    • Trajanje::checked_div
  • Dozvoljeno dereferenciranje "*const T" pokazivača u "const" kontekstima.
  • U upravitelju paketa Cargo, polje rust_version je dodano u metapodatke paketa, a opcija “--message-format” je dodana naredbi “cargo install”.
  • Kompajler implementira podršku za mehanizam zaštite CFI (Control Flow Integrity), koji dodaje provjere prije svakog indirektnog poziva kako bi otkrio neke oblike nedefiniranog ponašanja koje bi potencijalno moglo dovesti do kršenja normalnog naloga izvršenja (kontrolnog toka) kao rezultat korištenje eksploata koji mijenjaju pokazivače pohranjene u memoriji na funkcije.
  • Kompajler je dodao podršku za verzije 5 i 6 formata za poređenje LLVM pokrivenosti, koji se koristi za procenu pokrivenosti koda tokom testiranja.
  • U kompajleru, zahtjevi za minimalnu verziju LLVM-a su podignuti na LLVM 12.
  • Implementiran je treći nivo podrške za platformu x86_64-unknown-none. Treći nivo uključuje osnovnu podršku, ali bez automatskog testiranja, objavljivanja službenih verzija ili provjere da li se kod može izgraditi.

Osim toga, možemo primijetiti Microsoftovu objavu izdanja biblioteka Rust za Windows 0.30, koje vam omogućavaju korištenje jezika Rust za razvoj aplikacija za Windows OS. Set uključuje dva sanduka paketa (windows i windows-sys), preko kojih možete pristupiti Win API-ju u Rust programima. Kod za API podršku se generiše dinamički iz metapodataka koji opisuju API, što vam omogućava da implementirate podršku 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 UWP (Universal Windows Platform) ciljnu platformu i implementira tipove Handle i Debug.

izvor: opennet.ru

Dodajte komentar