Rust 1.74 -ohjelmointikielen julkaisu. RustVMM-tarkastus. Binderin uudelleenkirjoittaminen ruosteessa

Yleiskäyttöinen ohjelmointikieli Rust 1.74, joka on perustettu Mozilla-projektilla, mutta nyt kehitetty riippumattoman voittoa tavoittelemattoman järjestön Rust Foundationin alaisuudessa, on julkaistu. Kieli keskittyy muistin turvallisuuteen ja tarjoaa välineet korkean työn rinnakkaisuuden saavuttamiseen välttäen samalla roskankeräimen ja ajonajan käyttöä (ajoaika rajoittuu vakiokirjaston perusalustukseen ja ylläpitoon).

Rustin muistinkäsittelymenetelmät säästävät kehittäjää virheiltä osoittimia käsiteltäessä ja suojaavat ongelmilta, jotka johtuvat matalan tason muistin käsittelystä, kuten muistialueen käyttäminen sen vapauttamisen jälkeen, nollaosoittimien viittauksen poistaminen, puskurin ylitykset jne. Kirjastojen jakelua, koontiversioiden tarjoamista ja riippuvuuksien hallintaa varten projekti kehittää Cargo-pakettien hallintaa. Crates.io-tietovarastoa tuetaan kirjastojen isännöintiin.

Muistin turvallisuutta tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden, objektien eliniän (laajuuden) kirjaamisen ja muistin käytön oikeellisuuden arvioimisen avulla koodin suorittamisen aikana. Ruoste tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen pakollisen alustamisen ennen käyttöä, käsittelee virheet paremmin standardikirjastossa, soveltaa oletusarvoisesti muuttumattomien viitteiden ja muuttujien käsitettä, tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.

Tärkeimmät innovaatiot:

  • Lisätty mahdollisuus määrittää nukkatarkistukset Cargo.toml-tiedoston kautta paketinhallinnan luettelon kanssa. Nukkaasetusten, kuten vastaustason (kielletään, kieltää, varoita, salli) määrittämiseen ehdotetaan uusia osioita "[lints]" ja "[workspace.lints]", joiden muutokset otetaan huomioon tehtäessä päätöstä jälleenrakentaminen. Esimerkiksi sen sijaan, että määrität "-F", "-D", "-W" ja "-A" -lippuja koottaessa tai lisättäessä "#![forbid(unsafe_code)]" ja "#![deny(clippy" :” attribuutteja koodille) :enum_glob_use)]" voidaan nyt käyttää rahtiluettelossa: [lints.rust] unsafe_code = "kielletään" [lints.clippy] enum_glob_use = "kiellä"
  • Crate-paketinhallinta on lisännyt mahdollisuuden todentaa, kun muodostetaan yhteys arkistoon. Peruspaketti sisältää tuen todennusparametrien sijoittamiselle Linuxin tunnistetietovarastoihin (libsecretin perusteella), macOS:iin (Keychain) ja Windowsiin (Windows Credential Manager), mutta järjestelmä on alun perin tehty modulaariseksi ja mahdollistaa työn organisoinnin eri toimittajien kanssa tallentamiseen ja esimerkiksi tunnuksia generoimalla on valmisteltu laajennus 1Password-salasananhallintaohjelman käyttöä varten. Tietovarasto saattaa vaatia todennusta mitä tahansa toimintaa varten, ei vain sen varmistamiseksi, että paketit on julkaistu. ~/.cargo/config.toml [rekisteri] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Paluutyyppisten projektioiden (impl_trait_projections) tuki on vakiintunut, jolloin Self ja T::Assoc voidaan mainita palautustyypeissä, kuten "async fn" ja "->impl Trait". struct Wrapper<'a, T>(&'a T); // Läpinäkymättömät palautustyypit, joissa mainitaan "itse": impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } ominaisuus Ominaisuus<'a> { type Assoc; fn new() -> Self::Assoc; } impl Ominaisuus<'_> for () { type Assoc = (); fn new() {} } // Läpinäkymättömät palautustyypit, joissa mainitaan liittyvä tyyppi: impl<'a, T: Piirre<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iteraattori { /* … */ } }
  • Uusi osa API:sta on siirretty vakaan luokkaan, mukaan lukien ominaisuuksien menetelmät ja toteutukset on vakautettu:
  • "const"-attribuuttia, joka määrittää mahdollisuuden käyttää missä tahansa kontekstissa vakioiden sijaan, käytetään funktioissa:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • ydin::num::Kyllästävä
    • impl From for std::process::Stdio
    • impl From for std::process::Stdio
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • impl From for std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::in_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Error::other
    • impl TryFrom u16:lle
    • impl Lähettäjä<&[T; N]>Vec
    • impl Lähettäjä<&mut [T; N]>Vec
    • impl Lähettäjä<[T; N]> kaarelle<[T]>
    • impl Lähettäjä<[T; N]> Rc:lle<[T]>
  • Kääntäjä, työkalupakki, vakiokirjasto ja luodut sovellusten suoritettavat tiedostot ovat lisänneet Apple-alustoille asetettuja vaatimuksia, ja ne vaativat nyt vähintään vuonna 10.12 julkaistun macOS 10 Sierran, iOS 10:n ja tvOS 2016:n.
  • Kolmas tukitaso on otettu käyttöön i686-pc-windows-gnullvm-alustalle. Kolmas taso sisältää perustuen, mutta ilman automaattista testausta, virallisten koontiversioiden julkaisemista tai sen tarkistamista, voidaanko koodi rakentaa.
  • Toinen tukitaso loongarch64-unknown-none -kohdealustaan ​​on otettu käyttöön. Toinen tukitaso sisältää asennustakuun.

Lisäksi voidaan huomioida kaksi ruostekieleen liittyvää tapahtumaa:

  • Avoimen lähdekoodin projektien turvallisuutta vahvistamaan luotu OSTIF (Open Source Technology Improvement Fund) on julkaissut tulokset RustVMM-projektin auditoinnista, joka tarjoaa komponentteja tehtäväkohtaisten hypervisorien ja virtuaalikonemonitoreiden (VMM) luomiseen. Projektin kehittämiseen osallistuvat muun muassa Intel, Alibaba, Amazon, Google, Linaro ja Red Hat. Intel Cloud Hypervisor- ja Dragonball-hypervisoreita kehitetään RustVMM:n pohjalta. Auditointi vahvisti koodikannan korkean laadun ja tekniikoiden käytön arkkitehtuurissa ja toteutuksessa maksimaalisen turvallisuuden saavuttamiseksi. Auditoinnin aikana tunnistettiin 6 ongelmaa, joilla ei ollut suoraa vaikutusta turvallisuuteen.
  • Google esitteli Binder-prosessien välisen viestintämekanismin uuden toteutuksen, joka on kirjoitettu uudelleen Rust-kielellä, Linux-ytimen kehittäjien postituslistalle. Uudelleentyöstö tehtiin osana projektia, jolla vahvistetaan turvallisuutta, edistetään turvallisia ohjelmointitekniikoita ja tehostetaan ongelmien tunnistamista käytettäessä muistia Androidissa (noin 70 % kaikista Androidissa tunnistetuista vaarallisista haavoittuvuuksista johtuu muistin kanssa työskentelyn virheistä ). Binder in Rust -toteutus on saavuttanut toiminnallisuuden pariteetin alkuperäisen C-kielisen version kanssa, läpäisee kaikki AOSP (Android Open-Source Project) -testit ja sitä voidaan käyttää laiteohjelmiston työversioiden luomiseen. Molempien toteutusten suorituskyky on suunnilleen samalla tasolla (poikkeamat -1.96 % ja +1.38 % sisällä).

Lähde: opennet.ru

Lisää kommentti