Vrystelling van die Rust 1.74-programmeertaal. RustVMM oudit. Herskryf Binder in Rust

Die algemene programmeertaal Rust 1.74, wat deur die Mozilla-projek gestig is, maar nou ontwikkel is onder die beskerming van die onafhanklike nie-winsgewende organisasie Rust Foundation, is vrygestel. Die taal fokus op geheueveiligheid en bied die middele om hoë werkparallelisme te bereik terwyl die gebruik van 'n vullisverwyderaar en looptyd vermy word (looptyd word verminder tot basiese inisialisering en instandhouding van die standaardbiblioteek).

Rust se geheue hantering metodes red die ontwikkelaar van foute wanneer wysers gemanipuleer word en beskerm teen probleme wat ontstaan ​​as gevolg van laevlak geheue manipulasie, soos toegang tot 'n geheue area nadat dit vrygestel is, herkenning van nulwysers, buffer oorskryding, ens. Om biblioteke te versprei, bouwerk te verskaf en afhanklikhede te bestuur, ontwikkel die projek die Cargo-pakketbestuurder. Die crates.io-bewaarplek word ondersteun vir die aanbieding van biblioteke.

Geheueveiligheid word tydens samestellingstyd in Rust verskaf deur verwysingskontrolering, tred te hou met objekeienaarskap, tred te hou met objekleeftye (bestekke), en die korrektheid van geheuetoegang tydens kode-uitvoering te assesseer. Roes bied ook beskerming teen heelgetal oorvloei, vereis verpligte inisialisering van veranderlike waardes voor gebruik, hanteer foute beter in die standaard biblioteek, pas die konsep van onveranderlike verwysings en veranderlikes by verstek toe, bied sterk statiese tik om logiese foute te minimaliseer.

Belangrikste innovasies:

  • Het die vermoë bygevoeg om pluiskontroles op te stel via die Cargo.toml-lêer met die pakketbestuurdermanifes. Om pluisinstellings te definieer, soos die reaksievlak (verbied, weier, waarsku, laat toe), word nuwe afdelings "[lints]" en "[workspace.lints]" voorgestel, veranderinge waarin in ag geneem word wanneer 'n besluit geneem word oor herbou. Byvoorbeeld, in plaas daarvan om die “-F”, “-D”, “-W” en “-A” vlae te spesifiseer wanneer die “#![verbied(onveilige_kode)]” en “#![deny(clippy) saamgestel of bygevoeg word :” kenmerke aan die kode) :enum_glob_use)]" kan nou in die Cargo-manifes gebruik word: [lints.rust] unsafe_code = "verbied" [lints.clippy] enum_glob_use = "ontken"
  • Die Crate-pakketbestuurder het die vermoë bygevoeg om te verifieer wanneer dit aan 'n bewaarplek gekoppel word. Die basiese pakket bevat ondersteuning vir die plasing van stawingsparameters in Linux-geloofswinkelwinkels (gebaseer op libsecret), macOS (Sleutelhanger) en Windows (Windows Credential Manager), maar die stelsel is aanvanklik modulêr gemaak en stel jou in staat om werk met verskeie verskaffers te organiseer vir die berging en genereer tekens, byvoorbeeld, 'n inprop is voorberei vir die gebruik van die 1Password wagwoord bestuurder. Stawing kan deur die bewaarplek vereis word vir enige bewerking, nie net om te bevestig dat pakkette gepubliseer is nie. ~/.cargo/config.toml [register] global-credential-providers = ["vrag:token", "cargo:libsecret"]
  • Ondersteuning vir opbrengstipe projeksies (impl_trait_projections) is gestabiliseer, sodat Self en T::Assoc genoem kan word in opbrengstipes soos "async fn" en "->impl Trait". struct Wrapper<'a, T>(&'a T); // Ondeursigtige terugkeertipes wat `Self` noem: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } eienskap Eienskap<'a> { tipe Assoc; fn new() -> Self::Assoc; } impl Eienskap<'_> vir () { tipe Assoc = (); fn new() {} } // Ondeursigtige terugkeertipes wat 'n geassosieerde tipe noem: impl<'a, T: Eienskap<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • 'n Nuwe gedeelte van die API is na die kategorie stal geskuif, insluitend die metodes en implementering van eienskappe is gestabiliseer:
  • Die "const"-kenmerk, wat die moontlikheid bepaal om dit in enige konteks in plaas van konstantes te gebruik, word in funksies gebruik:
    • kern::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • kern::num::Versadig
    • impl From vir std::proces::Stdio
    • impl From vir std::proces::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::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Fout::ander
    • impl TryFrom vir o16
    • impl Van<&[T; N]> vir Vec
    • impl Van<&mut [T; N]> vir Vec
    • impl Van<[T; N]> vir Arc<[T]>
    • impl Van<[T; N]> vir Rc<[T]>
  • Die samesteller, gereedskapstel, standaardbiblioteek en gegenereerde toepassingsuitvoerbare programme het verhoogde vereistes vir Apple-platforms, wat nou ten minste macOS 10.12 Sierra, iOS 10 en tvOS 10 wat in 2016 vrygestel is, vereis om te loop.
  • Die derde vlak van ondersteuning is geïmplementeer vir die i686-pc-windows-gnullvm-platform. Die derde vlak behels basiese ondersteuning, maar sonder outomatiese toetsing, publisering van amptelike bouwerk, of kontrolering of die kode gebou kan word.
  • Die tweede vlak van ondersteuning vir die loongarch64-unknown-none-teikenplatform is geïmplementeer. Die tweede vlak van ondersteuning behels 'n monteerwaarborg.

Daarbenewens kan twee gebeurtenisse wat verband hou met die Roes-taal opgemerk word:

  • Die OSTIF (Open Source Technology Improvement Fund), wat geskep is om die sekuriteit van oopbronprojekte te versterk, het die resultate van 'n oudit van die RustVMM-projek gepubliseer, wat komponente verskaf vir die skep van taakspesifieke hiperviseerders en virtuele masjienmonitors (VMM's). Maatskappye soos Intel, Alibaba, Amazon, Google, Linaro en Red Hat neem deel aan die ontwikkeling van die projek. Intel Cloud Hypervisor en Dragonball hipervisors word ontwikkel gebaseer op RustVMM. Die oudit het die hoë gehalte van die kodebasis en die gebruik van tegnieke in die argitektuur en implementering bevestig wat daarop gemik is om maksimum sekuriteit te bereik. Tydens die oudit is 6 probleme geïdentifiseer wat nie 'n direkte impak op veiligheid gehad het nie.
  • Google het 'n nuwe implementering van die Binder-tussenproseskommunikasiemeganisme, herskryf in die Rust-taal, aan die Linux-kernontwikkelaar-poslys bekendgestel. Die herwerk is uitgevoer as deel van 'n projek om sekuriteit te versterk, veilige programmeringstegnieke te bevorder en die doeltreffendheid van die identifisering van probleme te verhoog wanneer daar met geheue in Android gewerk word (ongeveer 70% van alle gevaarlike kwesbaarhede wat in Android geïdentifiseer word, word veroorsaak deur foute wanneer daar met geheue gewerk word ). Die implementering van Binder in Rust het gelykheid in funksionaliteit bereik met die oorspronklike weergawe in die C-taal, slaag alle AOSP (Android Open-Source Project) toetse en kan gebruik word om werkende uitgawes van firmware te skep. Die prestasie van beide implementerings is ongeveer op dieselfde vlak (afwykings binne -1.96% en +1.38%).

Bron: opennet.ru

Voeg 'n opmerking