Rilascio del linguaggio di programmazione Rust 1.62

È stato pubblicato il rilascio del linguaggio di programmazione general-purpose Rust 1.62, 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:

  • Il gestore di pacchetti "cargo" offre il comando "aggiungi", che consente di aggiungere nuove dipendenze al manifest Cargo.toml o modificare le dipendenze esistenti dalla riga di comando. Il comando consente inoltre di specificare funzionalità e versioni individuali, ad esempio: cargo add serde —features deriva cargo add nom@5
  • Aggiunta la possibilità di utilizzare "#[derive(Default)]" con enumerazioni in cui l'opzione predefinita è definita utilizzando l'attributo "#[default]". #[derive(Default)] enum Forse { #[default] Niente, Qualcosa(T), }
  • Sulla piattaforma Linux viene utilizzata un'implementazione più compatta e veloce del meccanismo di sincronizzazione Mutex, basata sull'utilizzo dei futex forniti dal kernel Linux. A differenza dell'implementazione precedentemente utilizzata basata sulla libreria pthreads, la nuova versione utilizza solo 5 byte invece di 40 per memorizzare lo stato Mutex, analogamente i meccanismi di blocco Condvar e RwLock sono stati trasferiti su futex.
  • È stato implementato un secondo livello di supporto per la piattaforma di destinazione x86_64-unknown-none, progettata per generare file eseguibili che possono funzionare senza sistema operativo. Ad esempio, la piattaforma di destinazione specificata può essere utilizzata durante la scrittura dei componenti del kernel. Il secondo livello di supporto prevede una garanzia di montaggio.
  • Il terzo livello di supporto è stato implementato per le piattaforme aarch64-pc-windows-gnullvm e x86_64-pc-windows-gnullvm. Il terzo livello prevede il supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della costruibilità del codice.
  • Una nuova porzione dell'API è stata spostata nella categoria stabile, inclusi i metodi e le implementazioni dei tratti sono stati stabilizzati:
    • bool::allora_alcuni
    • f32::totale_cmp
    • f64::totale_cmp
    • Stdin::linee
    • windows::CommandExt::raw_arg
    • impl valore predefinito per AssertUnwindSafe
    • Da > per RC
    • Da > per Arco<[u8]>
    • FusedIterator per EncodeWide

    Fonte: opennet.ru

Aggiungi un commento