Rilascio del linguaggio di programmazione Rust 1.65

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

  • È stato aggiunto il supporto per i tipi associati generici (GAT), che rende possibile creare alias di tipo associati a un altro tipo e consente ai costruttori di tipo di essere associati ai tratti. tratto Foo { type Bar<'x>; }
  • È implementata l'espressione "let... else", che consente di verificare la condizione di corrispondenza del modello direttamente all'interno dell'espressione "let" ed eseguire codice arbitrario se il modello non corrisponde. let Ok(count) = u64::from_str(count_str) else { panico!("Impossibile analizzare il numero intero: '{count_str}'"); };
  • È consentito utilizzare l'istruzione break per uscire prematuramente dai blocchi con nome, utilizzando il nome del blocco (etichetta) per determinare il blocco da terminare. let result = 'blocco: { fai_cosa(); if condizione_non_soddisfatta() { break 'blocco 1; } fai_prossima_cosa(); if condizione_non_soddisfatta() { break 'blocco 2; } fai_ultima_cosa(); 3};
  • Per Linux, aggiunta la possibilità di salvare separatamente le informazioni di debug (split-debuginfo), precedentemente disponibile solo per la piattaforma macOS. Specificando l'opzione "-Csplit-debuginfo=unpacked" verranno salvati i dati debuginfo in formato DWARF in diversi file oggetto separati con estensione ".dwo". Specificando "-Csplit-debuginfo=packed" verrà creato un singolo pacchetto in formato ".dwp" che include tutti i dati debuginfo per il progetto. Per integrare debuginfo direttamente nella sezione .debug_* degli oggetti ELF, puoi utilizzare l'opzione "-Csplit-debuginfo=off".
  • Una nuova porzione dell'API è stata spostata nella categoria stabile, inclusi i metodi e le implementazioni dei tratti sono stati stabilizzati:
    • std::backtrace::backtrace
    • Vincolato::come_rif
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • L'attributo "const", che determina la possibilità di utilizzarlo in qualsiasi contesto al posto delle costanti, viene utilizzato nelle funzioni <*const T&>::offset_from e <*mut T>::offset_from
  • Come parte della fase finale del trasferimento dell'implementazione del protocollo LSP (Language Server Protocol) su ruggine-analyzer, l'implementazione obsoleta di Rust Language Server (RLS) è stata sostituita con uno stub server che emette un avviso che suggerisce di passare all'utilizzo di ruggine -analizzatore.
  • Durante la compilazione, viene abilitato il supporto per la distribuzione in linea del codice intermedio MIR, che accelera la compilazione dei tipici pacchetti crate del 3-10%.
  • Per accelerare le build pianificate, il gestore pacchetti Cargo fornisce l'ordinamento dei lavori in attesa in coda.

Inoltre si segnala un'intervista sull'utilizzo del linguaggio Rust presso Volvo per lo sviluppo di componenti per sistemi informativi automobilistici. Non ci sono piani per riscrivere il codice esistente e testato in Rust, ma per il nuovo codice Rust è una delle opzioni preferite per migliorare la qualità a un costo inferiore. Gruppi di lavoro sulla ruggine sono stati creati anche nelle associazioni automobilistiche AUTOSAR (AUTomotive Open System ARchitecture) e SAE (Society of Automotive Engineers).

Inoltre, David Kleidermacher, VP of Engineering di Google, ha parlato della traduzione in Rust del codice utilizzato nella piattaforma Android per gestire le chiavi di crittografia, nonché dell'uso di Rust nell'implementazione del protocollo DNS over HTTPS, nello stack per Chip UWB (Ultra-Wideband) e nel framework di virtualizzazione (Android Virtualization Framework) associato al chip Tensor G2. Per Android sono in fase di sviluppo anche nuovi stack per Bluetooth e Wi-Fi, riscritti in Rust. La strategia generale è quella di aumentare progressivamente la sicurezza, prima spostando i componenti software più insicuri e vitali su Rust, per poi estenderli ad altri sottosistemi ad essi associati. Lo scorso anno Rust è stato incluso nell'elenco dei linguaggi consentiti per lo sviluppo della piattaforma Android.

Fonte: opennet.ru

Aggiungi un commento