Izdaja programskega jezika Rust 1.74. Revizija RustVMM. Ponovno pisanje Binderja v Rust

Objavljena je bila izdaja splošnega programskega jezika Rust 1.74, ki ga je ustanovil projekt Mozilla, zdaj pa se razvija pod okriljem neodvisne neprofitne organizacije Rust Foundation. Jezik se osredotoča na varnost pomnilnika in zagotavlja sredstva za doseganje visoke paralelnosti opravil, hkrati pa se izogiba uporabi zbiralnika smeti in izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustove metode ravnanja s pomnilnikom rešijo razvijalca pred napakami pri ravnanju s kazalci in ščitijo pred težavami, ki nastanejo zaradi ravnanja s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje gradenj in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Varnost pomnilnika je v Rustu zagotovljena v času prevajanja s preverjanjem sklicevanj, spremljanjem lastništva objekta, spremljanjem življenjskih dob objektov (obseg) in ocenjevanjem pravilnosti dostopa do pomnilnika med izvajanjem kode. Rust zagotavlja tudi zaščito pred celoštevilskimi prelivi, zahteva obvezno inicializacijo vrednosti spremenljivk pred uporabo, bolje obravnava napake v standardni knjižnici, privzeto uporablja koncept nespremenljivih referenc in spremenljivk, ponuja močno statično tipkanje za zmanjšanje logičnih napak.

Glavne novosti:

  • Dodana možnost konfiguriranja preverjanj lint prek datoteke Cargo.toml z manifestom upravitelja paketov. Za določitev nastavitev lint, kot je raven odziva (prepovedi, zavrni, opozori, dovoli), so predlagani novi razdelki »[lints]« in »[workspace.lints]«, katerih spremembe se upoštevajo pri odločanju o obnova. Na primer, namesto podajanja zastavic »-F«, »-D«, »-W« in »-A« pri sestavljanju ali dodajanju »#![forbid(unsafe_code)]« in »#![deny(clippy :” atribute kode) :enum_glob_use)]" je zdaj mogoče uporabiti v manifestu Cargo: [lints.rust] unsafe_code = "prepoved" [lints.clippy] enum_glob_use = "deny"
  • Upravitelj paketov Crate je dodal možnost preverjanja pristnosti pri povezovanju z repozitorijem. Osnovna distribucija vključuje podporo za postavitev parametrov za preverjanje pristnosti v shrambah poverilnic Linux (na osnovi libsecret), macOS (Keychain) in Windows (Windows Credential Manager), sistem pa je bil sprva zasnovan modularno in omogoča organizacijo dela z različnimi ponudniki za shranjevanje in generiranje žetonov, na primer, je bil pripravljen vtičnik za uporabo upravitelja gesel 1Password. Repozitorij lahko zahteva avtentikacijo za katero koli operacijo, ne samo za potrditev, da so bili paketi objavljeni. ~/.cargo/config.toml [register] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Podpora za projekcije povratnega tipa (impl_trait_projections) je bila stabilizirana, kar omogoča, da sta Self in T::Assoc omenjena v povratnih tipih, kot sta "async fn" in "->impl Trait". struct Wrapper<'a, T>(&'a T); // Neprozorni povratni tipi, ki omenjajo `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } trait Trait<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Neprozorni povratni tipi, ki omenjajo povezan tip: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Nov del API-ja je bil premaknjen v kategorijo stabilnega, vključno s stabiliziranimi metodami in implementacijami lastnosti:
  • Atribut "const", ki določa možnost uporabe v katerem koli kontekstu namesto konstant, se uporablja v funkcijah:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • jedro::število::nasičeno
    • 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::Napaka::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]>
  • Prevajalnik, komplet orodij, standardna knjižnica in ustvarjene izvedljive datoteke aplikacij imajo povečane zahteve za platforme Apple, ki zdaj za delovanje zahtevajo vsaj macOS 10.12 Sierra, iOS 10 in tvOS 10, izdane leta 2016.
  • Tretja raven podpore je bila implementirana za platformo i686-pc-windows-gnullvm. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja, objavljanja uradnih gradenj ali preverjanja, ali je kodo mogoče zgraditi.
  • Izvedena je bila druga raven podpore za ciljno platformo loongarch64-unknown-none. Druga raven podpore vključuje garancijo za montažo.

Poleg tega je mogoče opaziti dva dogodka, povezana z jezikom Rust:

  • OSTIF (Open Source Technology Improvement Fund), ustanovljen za krepitev varnosti odprtokodnih projektov, je objavil rezultate revizije projekta RustVMM, ki zagotavlja komponente za ustvarjanje hipervizorjev za specifične naloge in monitorjev virtualnih strojev (VMM). Pri razvoju projekta sodelujejo podjetja, kot so Intel, Alibaba, Amazon, Google, Linaro in Red Hat. Intel Cloud Hypervisor in Dragonball hipervizorji se razvijajo na osnovi RustVMM. Revizija je potrdila visoko kakovost kodne baze ter uporabo tehnik v arhitekturi in implementaciji za doseganje maksimalne varnosti. Med revizijo je bilo ugotovljenih 6 težav, ki niso imele neposrednega vpliva na varnost.
  • Google je predstavil novo izvedbo medprocesnega komunikacijskega mehanizma Binder, prepisanega v jeziku Rust, na poštni seznam razvijalcev jedra Linuxa. Predelava je bila izvedena v okviru projekta krepitve varnosti, promocije varnih tehnik programiranja in povečanja učinkovitosti prepoznavanja težav pri delu s pomnilnikom v sistemu Android (približno 70 % vseh nevarnih ranljivosti, odkritih v sistemu Android, je posledica napak pri delu s pomnilnikom ). Implementacija Binderja v Rust je dosegla enakovredno funkcionalnost z izvirno različico v jeziku C, prestane vse teste AOSP (Android Open-Source Project) in se lahko uporablja za ustvarjanje delujočih izdaj vdelane programske opreme. Zmogljivost obeh izvedb je približno na enaki ravni (odstopanja znotraj -1.96 % in +1.38 %).

Vir: opennet.ru

Dodaj komentar