Utgivelse av programmeringsspråket Rust 1.74. RustVMM revisjon. Omskriver perm i rust

Utgivelsen av Rust 1.74 generell programmeringsspråk, grunnlagt av Mozilla-prosjektet, men nå utviklet i regi av den uavhengige ideelle organisasjonen Rust Foundation, har blitt publisert. Språket fokuserer på minnesikkerhet og gir midler til å oppnå høy jobbparallellisme samtidig som man unngår bruk av en søppeloppsamler og kjøretid (kjøretiden reduseres til grunnleggende initialisering og vedlikehold av standardbiblioteket).

Rusts minnehåndteringsmetoder sparer utvikleren fra feil ved manipulering av pekere og beskytter mot problemer som oppstår på grunn av minnehåndtering på lavt nivå, for eksempel tilgang til et minneområde etter at det har blitt frigjort, avreferering av null-pekere, bufferoverskridelser, etc. For å distribuere biblioteker, tilby bygg og administrere avhengigheter, utvikler prosjektet Cargo-pakkeansvarlig. Crates.io-depotet støttes for hosting av biblioteker.

Minnesikkerhet er gitt i Rust på kompileringstidspunktet gjennom referansesjekking, holde styr på objekteierskap, holde styr på objektlevetider (scopes), og vurdere riktigheten av minnetilgang under kjøring av kode. Rust gir også beskyttelse mot heltallsoverløp, krever obligatorisk initialisering av variabelverdier før bruk, håndterer feil bedre i standardbiblioteket, bruker konseptet med uforanderlige referanser og variabler som standard, tilbyr sterk statisk skriving for å minimere logiske feil.

Hovedinnovasjoner:

  • Lagt til muligheten til å konfigurere lokontroller via Cargo.toml-filen med pakkebehandlermanifestet. For å definere loinnstillinger, slik som responsnivået (forby, avslå, advare, tillat), foreslås nye seksjoner «[lints]» og «[workspace.lints]», endringer som tas med i betraktningen når det tas en beslutning om ombygging. For eksempel, i stedet for å spesifisere “-F”, “-D”, “-W” og “-A” flaggene når du setter sammen eller legger til “#![forbid(unsafe_code)]” og “#![deny(clippy) :” attributter til koden) :enum_glob_use)]" kan nå brukes i Cargo-manifestet: [lints.rust] unsafe_code = "forby" [lints.clippy] enum_glob_use = "deny"
  • Crate-pakkebehandleren har lagt til muligheten til å autentisere når du kobler til et depot. Den grunnleggende distribusjonen inkluderer støtte for plassering av autentiseringsparametere i Linux-legitimasjonsbutikker (basert på libsecret), macOS (nøkkelring) og Windows (Windows Credential Manager), men systemet ble i utgangspunktet laget modulært og lar deg organisere arbeid med ulike leverandører for lagring og generere tokens, for eksempel, har en plugin blitt forberedt for bruk av 1Password-passordbehandlingen. Autentisering kan kreves av depotet for enhver operasjon, ikke bare for å bekrefte at pakker er publisert. ~/.cargo/config.toml [register] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Støtte for returtypeprojeksjoner (impl_trait_projections) har blitt stabilisert, slik at Self og T::Assoc kan nevnes i returtyper som "async fn" og "->impl Trait". struct Wrapper<'a, T>(&'a T); // Ugjennomsiktige returtyper som nevner `Selv`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } egenskap Egenskap<'a> { type Assoc; fn new() -> Self::Assoc; } impl Egenskap<'_> for () { type Assoc = (); fn new() {} } // Ugjennomsiktige returtyper som nevner en assosiert type: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • En ny del av API har blitt flyttet til kategorien stabil, inkludert metodene og implementeringene av egenskaper er stabilisert:
  • "const"-attributtet, som bestemmer muligheten for å bruke det i enhver kontekst i stedet for konstanter, brukes i funksjonene:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • kjerne::num::mettende
    • impl Fra for std::process::Stdio
    • impl Fra for std::process::Stdio
    • impl Fra for std::process::Child{Stdin, Stdout, Stderr}
    • impl Fra for 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::Feil::annet
    • impl TryFrom for u16
    • impl Fra<&[T; N]>for Vec
    • impl Fra<&mut [T; N]>for Vec
    • impl Fra<[T; N]> for Arc<[T]>
    • impl Fra<[T; N]> for Rc<[T]>
  • Kompilatoren, verktøysettet, standardbiblioteket og genererte kjørbare applikasjoner har økte krav til Apple-plattformer, og krever nå minst macOS 10.12 Sierra, iOS 10 og tvOS 10 utgitt i 2016 for å kjøre.
  • Det tredje nivået av støtte er implementert for i686-pc-windows-gnullvm-plattformen. Det tredje nivået innebærer grunnleggende støtte, men uten automatisert testing, publisering av offisielle bygg, eller sjekk om koden kan bygges.
  • Det andre støttenivået for loongarch64-unknown-none-målplattformen er implementert. Det andre støttenivået innebærer en monteringsgaranti.

I tillegg kan to hendelser relatert til Rust-språket noteres:

  • OSTIF (Open Source Technology Improvement Fund), opprettet for å styrke sikkerheten til åpen kildekode-prosjekter, har publisert resultatene av en revisjon av RustVMM-prosjektet, som gir komponenter for å lage oppgavespesifikke hypervisorer og virtuelle maskinmonitorer (VMM). Selskaper som Intel, Alibaba, Amazon, Google, Linaro og Red Hat deltar i utviklingen av prosjektet. Intel Cloud Hypervisor og Dragonball hypervisorer utvikles basert på RustVMM. Tilsynet bekreftet den høye kvaliteten på kodebasen og bruken av teknikker i arkitekturen og implementeringen med sikte på å oppnå maksimal sikkerhet. Under tilsynet ble det identifisert 6 problemer som ikke hadde direkte innvirkning på sikkerheten.
  • Google introduserte en ny implementering av Binders interprosesskommunikasjonsmekanisme, omskrevet på Rust-språket, til Linux-kjernens e-postliste for utviklere. Omarbeidingen ble utført som en del av et prosjekt for å styrke sikkerheten, fremme sikre programmeringsteknikker og øke effektiviteten for å identifisere problemer når du arbeider med minne i Android (omtrent 70 % av alle farlige sårbarheter identifisert i Android er forårsaket av feil ved arbeid med minne ). Implementeringen av Binder i Rust har oppnådd paritet i funksjonalitet med originalversjonen på C-språket, består alle AOSP (Android Open-Source Project) tester og kan brukes til å lage fungerende utgaver av fastvare. Ytelsen til begge implementeringene er omtrent på samme nivå (avvik innenfor -1.96 % og +1.38 %).

Kilde: opennet.ru

Legg til en kommentar