Rilascio del linguaggio di programmazione Rust 1.74. Verifica RustVMM. Riscrittura del raccoglitore in Rust

È stato pubblicato il rilascio del linguaggio di programmazione general-purpose Rust 1.74, fondato dal progetto Mozilla, ma ora sviluppato sotto gli auspici dell'organizzazione no-profit indipendente Rust Foundation. Il linguaggio si concentra sulla sicurezza della memoria e fornisce i mezzi per ottenere un elevato parallelismo del lavoro evitando l'uso di un Garbage Collector e del runtime (il runtime è ridotto all'inizializzazione di base e alla manutenzione della libreria standard).

I metodi di gestione della memoria di Rust salvano lo sviluppatore da errori durante la manipolazione dei puntatori e proteggono dai problemi che sorgono a causa della gestione della memoria di basso livello, come l'accesso a un'area di memoria dopo che è stata liberata, la dereferenziazione di puntatori nulli, sovraccarichi del buffer, ecc. Per distribuire le librerie, fornire build e gestire le dipendenze, il progetto sviluppa il gestore di pacchetti Cargo. Il repository crates.io è supportato per l'hosting di librerie.

La sicurezza della memoria viene fornita in Rust in fase di compilazione attraverso il controllo dei riferimenti, tenendo traccia della proprietà dell'oggetto, tenendo traccia della durata dell'oggetto (scopi) e valutando la correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche protezione contro gli overflow di numeri interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita, offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

Principali innovazioni:

  • Aggiunta la possibilità di configurare controlli lint tramite il file Cargo.toml con il manifest del gestore pacchetti. Per definire le impostazioni lint, come il livello di risposta (vieta, nega, avvisa, consenti), vengono proposte le nuove sezioni “[lints]” e “[workspace.lints]”, le cui modifiche vengono prese in considerazione quando si prende una decisione in merito ricostruzione. Ad esempio, invece di specificare i flag "-F", "-D", "-W" e "-A" durante l'assemblaggio o l'aggiunta di "#![forbid(unsafe_code)]" e "#![deny(clippy :” attributi al codice) :enum_glob_use)]" può ora essere utilizzato nel manifest Cargo: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • Il gestore pacchetti Crate ha aggiunto la possibilità di autenticarsi durante la connessione a un repository. Il pacchetto base include il supporto per l'inserimento dei parametri di autenticazione negli archivi di credenziali Linux (basato su libsecret), macOS (Keychain) e Windows (Windows Credential Manager), ma inizialmente il sistema è reso modulare e consente di organizzare il lavoro con vari provider per l'archiviazione e generando token, ad esempio, è stato preparato un plugin per utilizzare il gestore password 1Password. L'autenticazione può essere richiesta dal repository per qualsiasi operazione, non solo per confermare che i pacchetti sono stati pubblicati. ~/.cargo/config.toml [registro] fornitori-di-credenziali-globali = ["cargo:token", "cargo:libsecret"]
  • Il supporto per le proiezioni del tipo restituito (impl_trait_projections) è stato stabilizzato, consentendo a Self e T::Assoc di essere menzionati nei tipi restituiti come "async fn" e "->impl Trait". struct Wrapper<'a, T>(&'a T); // Tipi restituiti opachi che menzionano `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } tratto Tratto<'a> { type Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Tipi restituiti opachi che menzionano un tipo associato: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • Una nuova porzione dell'API è stata spostata nella categoria stabile, inclusi i metodi e le implementazioni dei tratti sono stati stabilizzati:
  • L'attributo "const", che determina la possibilità di utilizzarlo in qualsiasi contesto al posto delle costanti, viene utilizzato nelle funzioni:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • core::num::Saturazione
    • impl From per std::process::Stdio
    • impl From per 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::Errore::altro
    • prova TryFrom per u16
    • impl Da<&[T; N]>per Vec
    • impl Da<&mut [T; N]>per Vec
    • impl Da<[T; N]> per Arco<[T]>
    • impl Da<[T; N]> per Rc<[T]>
  • Il compilatore, il toolkit, la libreria standard e gli eseguibili delle applicazioni generate hanno maggiori requisiti per le piattaforme Apple, che ora richiedono almeno macOS 10.12 Sierra, iOS 10 e tvOS 10 rilasciati nel 2016 per essere eseguiti.
  • Il terzo livello di supporto è stato implementato per la piattaforma i686-pc-windows-gnullvm. Il terzo livello prevede il supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali o verifica se il codice può essere creato.
  • È stato implementato il secondo livello di supporto per la piattaforma di destinazione loongarch64-unknown-none. Il secondo livello di supporto prevede una garanzia di montaggio.

Inoltre, si possono notare due eventi legati al linguaggio Rust:

  • L'OSTIF (Open Source Technology Improvement Fund), creato per rafforzare la sicurezza dei progetti open source, ha pubblicato i risultati di un audit del progetto RustVMM, che fornisce componenti per la creazione di hypervisor task-specific e monitor di macchine virtuali (VMM). Allo sviluppo del progetto partecipano aziende come Intel, Alibaba, Amazon, Google, Linaro e Red Hat. Gli hypervisor Intel Cloud Hypervisor e Dragonball vengono sviluppati sulla base di RustVMM. L'audit ha confermato l'elevata qualità del codice base e l'utilizzo di tecniche nell'architettura e nell'implementazione volte a raggiungere la massima sicurezza. Durante l'audit sono stati individuati 6 problemi che non avevano un impatto diretto sulla sicurezza.
  • Google ha introdotto una nuova implementazione del meccanismo di comunicazione interprocesso Binder, riscritto nel linguaggio Rust, nella mailing list degli sviluppatori del kernel Linux. La rielaborazione è stata effettuata nell'ambito di un progetto volto a rafforzare la sicurezza, promuovere tecniche di programmazione sicure e aumentare l'efficienza nell'identificazione dei problemi quando si lavora con la memoria in Android (circa il 70% di tutte le vulnerabilità pericolose identificate in Android sono causate da errori quando si lavora con la memoria ). L'implementazione di Binder in Rust ha raggiunto la parità di funzionalità con la versione originale in linguaggio C, supera tutti i test AOSP (Android Open-Source Project) e può essere utilizzata per creare edizioni funzionanti del firmware. Le prestazioni di entrambe le implementazioni sono all'incirca allo stesso livello (deviazioni comprese tra -1.96% e +1.38%).

Fonte: opennet.ru

Aggiungi un commento