Izdanje programskog jezika Rust 1.74. RustVMM revizija. Rewriting Binder u Rust

Objavljeno je izdanje Rust 1.74 programskog jezika opšte namjene, koji je osnovan od strane Mozilla projekta, a koji je sada razvijen pod okriljem nezavisne neprofitne organizacije Rust Foundation. Jezik se fokusira na sigurnost memorije i pruža sredstva za postizanje visokog paralelizma poslova uz izbjegavanje upotrebe sakupljača smeća i vremena izvođenja (vrijeme izvođenja je svedeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

Rustove metode rukovanja memorijom spašavaju programera od grešaka prilikom manipulacije pokazivačima i štite od problema koji nastaju zbog rukovanja memorijom na niskom nivou, kao što je pristup memorijskoj oblasti nakon što je ona oslobođena, 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.

Sigurnost memorije je osigurana u Rustu u vrijeme kompajliranja kroz provjeru referenci, praćenje vlasništva nad objektom, praćenje životnog vijeka objekata (opsega) i procjenu ispravnosti pristupa memoriji tokom izvršavanja koda. Rust također pruža zaštitu od prekoračenja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivih referenci i varijabli po defaultu, nudi snažno statičko kucanje kako bi se minimizirale logičke greške.

Glavne inovacije:

  • Dodata je mogućnost konfigurisanja provjera lint-a putem datoteke Cargo.toml sa manifestom menadžera paketa. Za definisanje postavki lintova, kao što je nivo odgovora (zabraniti, odbiti, upozoriti, dozvoliti), predlažu se novi odjeljci “[lints]” i “[workspace.lints]”, čije se promjene uzimaju u obzir prilikom donošenja odluke o rebuilding. Na primjer, umjesto navođenja oznaka “-F”, “-D”, “-W” i “-A” prilikom izgradnje ili dodavanja “#![forbid(unsafe_code)]” i “#![deny(clippy) :” atributi kodu) :enum_glob_use)]" sada se mogu koristiti u manifestu tereta: [lints.rust] unsafe_code = "zabraniti" [lints.clippy] enum_glob_use = "odbiti"
  • Crate menadžer paketa je dodao mogućnost autentifikacije prilikom povezivanja na spremište. Osnovna distribucija uključuje podršku za postavljanje parametara autentikacije u Linux skladišta vjerodajnica (baziranih na libsecret), macOS (Keychain) i Windows (Windows Credential Manager), ali je sistem inicijalno napravljen modularno i omogućava vam da organizirate rad sa različitim provajderima za pohranjivanje i generiranje tokena, na primjer, pripremljen je dodatak za korištenje 1Password menadžera lozinki. Skladište može zahtijevati autentifikaciju za bilo koju operaciju, a ne samo za potvrdu da su paketi objavljeni. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Podrška za projekcije tipa povratka (impl_trait_projections) je stabilizirana, omogućavajući Self i T::Assoc da budu spomenuti u tipovima povrata kao što su "async fn" i "->impl Trait". struct Wrapper<'a, T>(&'a T); // Neprozirni tipovi povrata koji spominju `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } osobina Trait<'a> { tip Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Neprozirni tipovi vraćanja koji spominju pridruženi tip: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Novi dio API-ja je premješten u kategoriju stabilnih, uključujući metode i implementacije osobina koje su stabilizirane:
  • Atribut "const", koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u funkcijama:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturating
    • impl Iz za std::process::Stdio
    • impl Iz za std::process::Stdio
    • impl Od za std::process::Child{Stdin, Stdout, Stderr}
    • impl Od za std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Error::other
    • impl TryFrom za u16
    • impl Od<&[T; N]>za Vec
    • impl Od<&mut [T; N]>za Vec
    • impl Od<[T; N]> za Arc<[T]>
    • impl Od<[T; N]> za Rc<[T]>
  • Kompajler, komplet alata, standardna biblioteka i generisani izvršni fajlovi aplikacije imaju povećane zahtjeve za Apple platforme, koje sada zahtijevaju najmanje macOS 10.12 Sierra, iOS 10 i tvOS 10 objavljene 2016. godine.
  • Treći nivo podrške je implementiran za platformu i686-pc-windows-gnullvm. 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.
  • Drugi nivo podrške za ciljnu platformu loongarch64-unknown-none je implementiran. Drugi nivo podrške uključuje garanciju za montažu.

Dodatno, mogu se primijetiti dva događaja vezana za Rust jezik:

  • OSTIF (Open Source Technology Improvement Fund), kreiran da ojača sigurnost projekata otvorenog koda, objavio je rezultate revizije RustVMM projekta, koji obezbjeđuje komponente za kreiranje hipervizora specifičnih za zadatke i monitora virtuelnih mašina (VMM). U razvoju projekta učestvuju kompanije kao što su Intel, Alibaba, Amazon, Google, Linaro i Red Hat. Intel Cloud Hypervisor i Dragonball hipervizori se razvijaju na osnovu RustVMM-a. Revizija je potvrdila visok kvalitet kodne baze i korištenje tehnika u arhitekturi i implementaciji u cilju postizanja maksimalne sigurnosti. Tokom revizije identifikovano je 6 problema koji nisu imali direktan uticaj na bezbednost.
  • Google je predstavio novu implementaciju Binder međuprocesnog komunikacijskog mehanizma, prepisan na Rust jeziku, na mailing listu Linux kernel developera. Prerada je provedena u sklopu projekta za jačanje sigurnosti, promoviranje sigurnih tehnika programiranja i povećanje efikasnosti identifikacije problema pri radu s memorijom u Androidu (oko 70% svih opasnih ranjivosti identificiranih u Androidu uzrokovano je greškama pri radu s memorijom ). Implementacija Bindera u Rustu je postigla paritet u funkcionalnosti sa originalnom verzijom na jeziku C, prolazi sve AOSP (Android Open-Source Project) testove i može se koristiti za kreiranje radnih izdanja firmvera. Učinak obje implementacije je približno na istom nivou (odstupanja unutar -1.96% i +1.38%).

izvor: opennet.ru

Dodajte komentar