Rust 1.74 programmēšanas valodas izlaišana. RustVMM audits. Binder pārrakstīšana rūsā

Publicēts vispārējas nozīmes programmēšanas valodas Rust 1.74 izlaidums, kas dibināts ar Mozilla projektu, bet tagad izstrādāts neatkarīgās bezpeļņas organizācijas Rust Foundation paspārnē. Valoda koncentrējas uz atmiņas drošību un nodrošina līdzekļus, lai sasniegtu augstu darba paralēlismu, vienlaikus izvairoties no atkritumu savācēja un izpildlaika izmantošanas (izpildlaiks tiek samazināts līdz standarta bibliotēkas pamata inicializēšanai un uzturēšanai).

Rust atmiņas apstrādes metodes pasargā izstrādātāju no kļūdām, manipulējot ar rādītājiem, un aizsargā pret problēmām, kas rodas zema līmeņa atmiņas apstrādes dēļ, piemēram, piekļūšana atmiņas apgabalam pēc tā atbrīvošanas, nulles rādītāju atsauču atcelšana, bufera pārtēriņi utt. Lai izplatītu bibliotēkas, nodrošinātu būvējumus un pārvaldītu atkarības, projekts izstrādā Cargo pakotņu pārvaldnieku. Crates.io repozitorijs tiek atbalstīts bibliotēku mitināšanai.

Atmiņas drošība tiek nodrošināta Rust kompilēšanas laikā, pārbaudot atsauces, sekojot līdzi objekta īpašumtiesībām, sekojot līdzi objektu kalpošanas laikam (tvērumam) un novērtējot atmiņas piekļuves pareizību koda izpildes laikā. Rūsa arī nodrošina aizsardzību pret veselu skaitļu pārpildīšanu, pieprasa obligātu mainīgo vērtību inicializāciju pirms lietošanas, labāk apstrādā kļūdas standarta bibliotēkā, pēc noklusējuma piemēro nemainīgu atsauču un mainīgo jēdzienu, piedāvā spēcīgu statisko rakstīšanu, lai samazinātu loģiskās kļūdas.

Galvenie jauninājumi:

  • Pievienota iespēja konfigurēt savārstījumu pārbaudes, izmantojot Cargo.toml failu ar pakotņu pārvaldnieka manifestu. Lai definētu savārstījumu iestatījumus, piemēram, atbildes līmeni (aizliegt, liegt, brīdināt, atļaut), tiek piedāvātas jaunas sadaļas “[lints]” un “[workspace.lints]”, kuru izmaiņas tiek ņemtas vērā, pieņemot lēmumu par pārbūve. Piemēram, tā vietā, lai norādītu karodziņus “-F”, “-D”, “-W” un “-A”, montējot vai pievienojot “#![forbid(unsafe_code)]” un “#![deny(clippy” :” atribūti kodam) :enum_glob_use)]" tagad var izmantot kravas manifestā: [lints.rust] unsafe_code = "aizliegt" [lints.clippy] enum_glob_use = "noliegt"
  • Crate pakotņu pārvaldnieks ir pievienojis autentifikācijas iespēju, kad tiek izveidots savienojums ar repozitoriju. Pamatizplatījumā ir iekļauts atbalsts autentifikācijas parametru izvietošanai Linux akreditācijas datu veikalos (pamatojoties uz libsecret), macOS (Keychain) un Windows (Windows Credential Manager), taču sistēma sākotnēji tika veidota modulāra un ļauj organizēt darbu ar dažādiem pakalpojumu sniedzējiem, lai uzglabātu un ģenerējot marķierus, piemēram, ir sagatavots spraudnis 1Password paroļu pārvaldnieka lietošanai. Repozitorijs var pieprasīt autentifikāciju jebkurai darbībai, nevis tikai, lai apstiprinātu, ka pakotnes ir publicētas. ~/.cargo/config.toml [reģistrs] global-credential-providers = ["krava:token", "krava:libsecret"]
  • Atbalsts atgriešanās veida projekcijām (impl_trait_projections) ir stabilizēts, ļaujot minēt Self un T::Assoc tādos atdeves veidos kā "async fn" un "->impl Trait". struct Iesaiņotājs<'a, T>(&'a T); // Necaurredzami atgriešanas veidi, kuros ir minēts “Self”: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } iezīme Pazīme<'a> { type Assoc; fn new() -> Self::Assoc; } impl Pazīme<'_> for () { type Assoc = (); fn new() {} } // Necaurspīdīgi atgriešanas veidi, kuros minēts saistītais veids: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterators { /* … */ } }
  • Jauna API daļa ir pārvietota uz stabilo kategoriju, tostarp ir stabilizētas pazīmju metodes un ieviešanas:
  • Atribūts "const", kas nosaka iespēju to izmantot jebkurā kontekstā konstantu vietā, tiek izmantots funkcijās:
    • kodols::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • kodols::num::Piesātināts
    • 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::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Kļūda::cits
    • impl TryFrom priekš u16
    • impl No<&[T; N]>par Vec
    • impl No<&mut [T; N]>par Vec
    • impl No<[T; N]> lokam <[T]>
    • impl No<[T; N]> Rc<[T]>
  • Kompilatoram, rīkkopai, standarta bibliotēkai un ģenerētajiem lietojumprogrammu izpildāmajiem failiem ir paaugstinātas prasības Apple platformām, un tagad ir nepieciešamas vismaz macOS 10.12 Sierra, iOS 10 un tvOS 10, kas izlaistas 2016. gadā.
  • Trešais atbalsta līmenis ir ieviests platformai i686-pc-windows-gnullvm. Trešais līmenis ietver pamata atbalstu, taču bez automatizētas testēšanas, oficiālu būvējumu publicēšanas vai pārbaudes, vai kodu var izveidot.
  • Otrais atbalsta līmenis loongarch64-unknown-none mērķa platformai ir ieviests. Otrais atbalsta līmenis ietver montāžas garantiju.

Turklāt var atzīmēt divus notikumus, kas saistīti ar rūsas valodu:

  • OSTIF (Open Source Technology Improvement Fund), kas izveidots, lai stiprinātu atvērtā pirmkoda projektu drošību, ir publicējis RustVMM projekta audita rezultātus, kas nodrošina komponentus uzdevumu specifisku hipervizoru un virtuālo mašīnu monitoru (VMM) izveidei. Projekta izstrādē piedalās tādi uzņēmumi kā Intel, Alibaba, Amazon, Google, Linaro un Red Hat. Intel Cloud Hypervisor un Dragonball hipervizori tiek izstrādāti, pamatojoties uz RustVMM. Revīzija apstiprināja koda bāzes augsto kvalitāti un tehnisko paņēmienu izmantošanu arhitektūrā un ieviešanā, lai panāktu maksimālu drošību. Audita laikā tika konstatētas 6 problēmas, kurām nav tiešas ietekmes uz drošību.
  • Google Linux kodola izstrādātāju adresātu sarakstā ieviesa jaunu Binder starpprocesu komunikācijas mehānisma ieviešanu, kas pārrakstīta Rust valodā. Pārstrādāšana tika veikta kā daļa no projekta, lai stiprinātu drošību, veicinātu drošas programmēšanas metodes un palielinātu problēmu identificēšanas efektivitāti, strādājot ar atmiņu operētājsistēmā Android (apmēram 70% no visām Android identificētajām bīstamajām ievainojamībām izraisa kļūdas, strādājot ar atmiņu ). Binder in Rust ieviešana ir sasniegusi paritāti funkcionalitātē ar oriģinālo versiju C valodā, iztur visus AOSP (Android Open-Source Project) testus un to var izmantot, lai izveidotu programmaparatūras darba izdevumus. Abu implementāciju veiktspēja ir aptuveni vienā līmenī (novirzes robežās -1.96% un +1.38%).

Avots: opennet.ru

Pievieno komentāru