Liberazione di a lingua di prugrammazione Rust 1.74. Audit RustVMM. Riscrittura di Binder in Rust

A liberazione di a lingua di prugrammazione Rust 1.74 generale, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua si focalizeghja nantu à a sicurità di a memoria è furnisce i mezi per ottene un altu parallelismu di u travagliu evitendu l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).

I metudi di gestione di a memoria di Rust salvanu u sviluppatore da l'errore quandu manipulanu i puntatori è prutegge da i prublemi chì si sviluppanu per via di a gestione di memoria di pocu livellu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prughjettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per l'ospitu di biblioteche.

A sicurezza di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, u seguimentu di a pruprietà di l'ughjettu, a traccia di a vita di l'ughjettu (scopi), è a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.

Innuvazioni principali:

  • Aggiunta l'abilità di cunfigurà cuntrolli di lint via u schedariu Cargo.toml cù u manifestu di gestore di pacchetti. Per definisce i paràmetri di lint, cum'è u livellu di risposta (proibisce, deny, avvistà, permette), sò pruposti novi rùbbriche "[lints]" è "[workspace.lints]", cambiamenti in quale sò cunsiderate quandu si piglia una decisione. ricustruisce. Per esempiu, invece di specificà i bandieri "-F", "-D", "-W" è "-A" quandu si assemblanu o aghjunghje "#![forbid(unsafe_code)]" è "#![deny (clippy). :" attributi à u codice) : enum_glob_use)]" pò avà esse usatu in u manifestu Cargo: [lints.rust] unsafe_code = "proibisce" [lints.clippy] enum_glob_use = "deny"
  • U gestore di pacchetti Crate hà aghjustatu a capacità di autentificà quandu si cunnetta à un repository. A distribuzione basica include supportu per mette paràmetri di autentificazione in i magazzini di credenziali Linux (basatu nantu à libsecret), macOS (Keychain) è Windows (Windows Credential Manager), ma u sistema hè statu inizialmente modulare è vi permette di urganizà u travagliu cù diversi fornituri per almacenà è generando tokens, per esempiu, un plugin hè statu preparatu per utilizà u gestore di password 1Password. L'autentificazione pò esse dumandata da u repositoriu per qualsiasi operazione, micca solu per cunfirmà chì i pacchetti sò stati publicati. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • U supportu per e proiezioni di u tipu di ritornu (impl_trait_projections) hè statu stabilizatu, chì permette à Self è T::Assoc di esse citati in i tipi di ritornu cum'è "async fn" è "->impl Trait". struct Wrapper<'a, T>(&'a T); // Tipi di ritornu opachi chì menzionanu `Self`: impl Wrapper<'_, ()> { async fn async_fn () -> Self { /* … */ } fn impl_trait () -> impl Iterator { /* … */ } } trait Trait<'a> { tipu Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Tipi di ritornu opachi chì menzionanu un tipu assuciatu: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs () -> impl Iterator { /* ... */ } }
  • Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
  • L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu in e funzioni:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::saturante
    • impl From per std::process::Stdio
    • impl From per std::process::Stdio
    • impl From per std::process::Child{Stdin, Stdout, Stderr}
    • impl From per 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::Errore::altru
    • impl TryFrom per u 16
    • impl Da<&[T; N]> per Vec
    • impl Da<&mut [T; N]> per Vec
    • impl Da<[T; N]> per Arc<[T]>
    • impl Da<[T; N]> per Rc<[T]>
  • U compilatore, u toolkit, a libreria standard è l'eseguibili di l'applicazioni generati anu aumentatu i requisiti per e piattaforme Apple, chì avà necessitanu almenu macOS 10.12 Sierra, iOS 10 è tvOS 10 liberatu in 2016 per esse funzionatu.
  • U terzu livellu di supportu hè statu implementatu per a piattaforma i686-pc-windows-gnullvm. U terzu livellu implica un supportu basicu, ma senza teste automatizate, publicà custruzzioni ufficiali, o cuntrollà se u codice pò esse custruitu.
  • U sicondu livellu di supportu per a piattaforma di destinazione loongarch64-unknown-none hè statu implementatu. U sicondu livellu di sustegnu implica una guaranzia di assemblea.

Inoltre, ponu esse nutati dui avvenimenti in relazione à a lingua Rust:

  • L'OSTIF (Open Source Technology Improvement Fund), creatu per rinfurzà a sicurità di i prughjetti open source, hà publicatu i risultati di un auditu di u prughjettu RustVMM, chì furnisce cumpunenti per a creazione di ipervisori specifichi per i compiti è monitori di macchine virtuali (VMM). Cumpagnia cum'è Intel, Alibaba, Amazon, Google, Linaro è Red Hat participanu à u sviluppu di u prugettu. Intel Cloud Hypervisor è Dragonball hypervisors sò sviluppati basatu annantu à RustVMM. L'auditu hà cunfirmatu l'alta qualità di a basa di codice è l'usu di tecniche in l'architettura è l'implementazione destinate à ottene a massima sicurezza. Durante l'auditu, i prublemi 6 sò stati identificati chì ùn anu micca un impattu direttu nantu à a sicurità.
  • Google hà introduttu una nova implementazione di u mecanismu di cumunicazione interprocessu Binder, riscritta in a lingua Rust, à a lista di mailing di sviluppatori di u kernel Linux. A rework hè stata realizata cum'è parte di un prughjettu per rinfurzà a sicurità, prumove tecniche di prugrammazione sicura è aumentà l'efficienza di identificà i prublemi quandu u travagliu cù memoria in Android (circa 70% di tutte e vulnerabilità periculose identificate in Android sò causati da errori quandu si travaglia cù memoria. ). L'implementazione di Binder in Rust hà ottinutu a parità di funziunalità cù a versione originale in lingua C, passa tutte e teste AOSP (Android Open-Source Project) è pò esse usata per creà edizioni di firmware di travagliu. U rendiment di e duie implementazioni hè apprussimatamente à u listessu livellu (deviazioni in -1.96% è + 1.38%).

Source: opennet.ru

Add a comment