Rust 1.74 programavimo kalbos išleidimas. RustVMM auditas. Binder perrašymas rūdyje

Paskelbtas „Mozilla“ projekto įkurtos, bet dabar globojamos nepriklausomos ne pelno organizacijos „Rust Foundation“ bendrosios paskirties programavimo kalbos „Rust 1.74“ leidimas. Kalba daugiausia dėmesio skiria atminties saugai ir suteikia galimybę pasiekti aukštą darbo lygiagretumą, vengiant šiukšlių rinktuvo ir vykdymo laiko (vykdymo laikas sumažinamas iki pagrindinės standartinės bibliotekos inicijavimo ir priežiūros).

„Rust“ atminties apdorojimo metodai apsaugo kūrėją nuo klaidų manipuliuojant rodyklėmis ir apsaugo nuo problemų, kylančių dėl žemo lygio atminties tvarkymo, pvz., prieiga prie atminties srities ją atlaisvinus, nulinių rodyklių panaikinimas, buferio viršijimas ir kt. Siekiant platinti bibliotekas, teikti kūrimo ir valdyti priklausomybes, projektas sukuria krovinių paketų tvarkyklę. Crates.io saugykla palaikoma bibliotekų prieglobai.

Atminties sauga „Rust“ užtikrinama kompiliavimo metu, tikrinant nuorodas, stebint objekto nuosavybę, stebint objektų gyvavimo trukmę (apimtį) ir įvertinant prieigos prie atminties teisingumą vykdant kodą. Rust taip pat suteikia apsaugą nuo sveikųjų skaičių perpildymo, reikalauja, kad kintamieji būtų inicijuojami prieš naudojant, geriau tvarko klaidas standartinėje bibliotekoje, pagal numatytuosius nustatymus taiko nekintamų nuorodų ir kintamųjų koncepciją ir siūlo tvirtą statinį rašymą, kad būtų sumažintos loginės klaidos.

Pagrindinės naujovės:

  • Pridėta galimybė konfigūruoti pūkelių patikrinimus naudojant Cargo.toml failą su paketų tvarkyklės manifestu. Norint apibrėžti pūkelių nustatymus, tokius kaip atsako lygis (uždrausti, neleisti, įspėti, leisti), siūlomos naujos skiltys „[lints]“ ir „[workspace.lints]“, į kurių pakeitimus atsižvelgiama priimant sprendimą dėl atstatymas. Pavyzdžiui, užuot nurodyę „-F“, „-D“, „-W“ ir „-A“ vėliavėles, kai surenkate arba pridedate „#![forbid(nesafe_code)]“ ir „#![deny(clippy“) :” atributus kodui) :enum_glob_use)]" dabar gali būti naudojamas krovinio manifeste: [lints.rust] unsafe_code = "uždrausti" [lints.clippy] enum_glob_use = "neleisti"
  • „Crate“ paketų tvarkyklė pridėjo galimybę autentifikuoti jungiantis prie saugyklos. Pagrindinis platinimas apima autentifikavimo parametrų įdėjimo į „Linux“ kredencialų parduotuves (pagal „libsecret“), „MacOS“ („Keychain“) ir „Windows“ („Windows Credential Manager“) palaikymą, tačiau iš pradžių sistema buvo sukurta modulinė ir leidžia organizuoti darbą su įvairiais tiekėjais, skirtus saugoti ir saugoti. generuojant žetonus, pavyzdžiui, buvo paruoštas įskiepis, skirtas naudoti 1Password slaptažodžių tvarkyklę. Saugykla gali reikalauti autentifikavimo atliekant bet kokią operaciją, o ne tik norint patvirtinti, kad paketai buvo paskelbti. ~/.cargo/config.toml [registras] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Grąžinimo tipo projekcijų (impl_trait_projections) palaikymas buvo stabilizuotas, todėl „Self“ ir „T::Assoc“ galima paminėti grąžos tipuose, tokiuose kaip „async fn“ ir „->impl Trait“. struct Wrapper<'a, T>(&'a T); // Neskaidrūs grąžinimo tipai, kuriuose minimas „Self“: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } bruožas Požymis<'a> { tipas Assoc; fn new() -> Self::Assoc; } impl Požymis<'_> for () { type Assoc = (); fn new() {} } // Neskaidrūs grąžinimo tipai, kuriuose minimas susietas tipas: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iteratorius { /* … */ } }
  • Nauja API dalis buvo perkelta į stabiliųjų kategoriją, įskaitant stabilizuotus bruožų metodus ir įgyvendinimą:
  • Atributas "const", kuris nustato galimybę jį naudoti bet kuriame kontekste vietoj konstantų, naudojamas funkcijose:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • šerdis::num::Sotinantis
    • impl From std::process::Stdio
    • impl From std::process::Stdio
    • impl From std::process::Child{Stdin, Stdout, Stderr}
    • impl From 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::Klaida::kita
    • impl TryFrom u16
    • impl Nuo<&[T; N]>už Vec
    • impl Nuo<&mut [T; N]>už Vec
    • impl Nuo<[T; N]> lankui <[T]>
    • impl Nuo<[T; N]> Rc<[T]>
  • Kompiliatorius, įrankių rinkinys, standartinė biblioteka ir sugeneruotos programos vykdomosios programos padidino reikalavimus „Apple“ platformoms, todėl dabar reikia bent „macOS 10.12 Sierra“, „iOS 10“ ir „tvOS 10“, išleistų 2016 m.
  • Trečiasis palaikymo lygis įdiegtas platformai i686-pc-windows-gnullvm. Trečiasis lygis apima pagrindinį palaikymą, bet be automatinio testavimo, oficialių versijų paskelbimo ar patikrinimo, ar kodą galima sukurti.
  • Įdiegtas antrasis loongarch64-unknown-none tikslinės platformos palaikymo lygis. Antrasis paramos lygis apima surinkimo garantiją.

Be to, galima pastebėti du įvykius, susijusius su rūdžių kalba:

  • Atvirojo kodo projektų saugumui stiprinti sukurtas OSTIF (Open Source Technology Improvement Fund) paskelbė RustVMM projekto audito rezultatus, kuriuose pateikiami komponentai, skirti kurti specifinėms užduotims skirtus hipervizorius ir virtualių mašinų monitorius (VMM). Projekto kūrime dalyvauja tokios kompanijos kaip „Intel“, „Alibaba“, „Amazon“, „Google“, „Linaro“ ir „Red Hat“. „Intel Cloud Hypervisor“ ir „Dragonball“ hipervizoriai kuriami remiantis RustVMM. Auditas patvirtino aukštą kodų bazės kokybę ir metodų naudojimą architektūroje bei įgyvendinime, kuriais siekiama didžiausio saugumo. Audito metu buvo nustatytos 6 problemos, kurios neturėjo tiesioginės įtakos saugai.
  • „Google“ pristatė naują „Binder“ tarpprocesinio ryšio mechanizmo įgyvendinimą, perrašytą Rust kalba, „Linux“ branduolio kūrėjų adresų sąraše. Pertvarkymas buvo atliktas įgyvendinant projektą, skirtą sustiprinti saugumą, skatinti saugias programavimo technologijas ir padidinti problemų, susijusių su atmintimi, nustatymo efektyvumą „Android“ sistemoje (apie 70% visų pavojingų „Android“ spragų atsiranda dėl klaidų dirbant su atmintimi. ). Įdiegus „Binder“ in Rust, funkcionalumas lygus su originalia versija C kalba, jis išlaiko visus AOSP („Android Open-Source Project“) testus ir gali būti naudojamas kuriant darbinius programinės aparatinės įrangos leidimus. Abiejų diegimų našumas yra maždaug tokio paties lygio (nukrypimai -1.96% ir +1.38%).

Šaltinis: opennet.ru

Добавить комментарий