È stato rilasciato il linguaggio di programmazione di uso generale Rust 1.62, originariamente sviluppato da Mozilla, ma ora mantenuto sotto l'egida dell'organizzazione no-profit indipendente Rust Foundation. Il linguaggio è focalizzato sulla gestione sicura della memoria e offre strumenti per raggiungere un elevato livello di parallelismo nell'esecuzione delle operazioni, evitando l'uso di garbage collector e runtime (il runtime si riduce a una semplice inizializzazione e gestione della libreria standard).
I metodi di gestione della memoria in Rust liberano gli sviluppatori dagli errori nella manipolazione dei puntatori e li proteggono da problematiche derivanti dal lavoro a basso livello con la memoria, come l'accesso a zone di memoria dopo la loro liberazione, la dereferenziazione di puntatori nulli, il superamento dei limiti del buffer, e così via. Per la distribuzione delle librerie, la gestione della compilazione e delle dipendenze, si è sviluppato un gestore di pacchetti chiamato Cargo. Le librerie sono ospitate nel repository crates.io.
La gestione sicura della memoria in Rust è garantita durante la compilazione tramite il controllo dei riferimenti, il tracciamento della proprietà degli oggetti, la gestione della durata degli oggetti (scope) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust offre anche strumenti per proteggere da overflow 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 e offre una forte tipizzazione statica per ridurre al minimo gli errori logici.
Novità principali:
- Nel gestore di pacchetti "cargo" è stata introdotta il comando "add", che consente di aggiungere nuove dipendenze al manifesto Cargo.toml o modificare quelle esistenti direttamente dalla riga di comando. Il comando permette anche di specificare proprietà (feature) e versioni separate, ad esempio: cargo add serde —features derive cargo add nom@5
- È stata aggiunta la possibilità di utilizzare "#[derive(Default)]" con le enumerazioni (enum), in cui è definita una variante predefinita tramite l'attributo "#[default]". #[derive(Default)] enum Maybe { #[default] Nothing, Something(T), }
- Sulla piattaforma Linux è stata implementata una versione più compatta e veloce del meccanismo di sincronizzazione Mutex, basata sull'utilizzo di futex forniti dal kernel Linux. A differenza della precedente implementazione basata sulla libreria pthreads, il nuovo approccio consuma solo 5 byte per memorizzare lo stato di Mutex, anziché 40. Analogamente, i meccanismi di blocco Condvar e RwLock sono stati convertiti per futex.
- È stato implementato un secondo livello di supporto per la piattaforma di destinazione x86_64-unknown-none, destinata alla creazione di file eseguibili in grado di funzionare senza sistema operativo. Ad esempio, la piattaforma di destinazione indicata può essere utilizzata per scrivere componenti del kernel. Il secondo livello di supporto implica una garanzia di compilazione.
- È stato realizzato un terzo livello di supporto per le piattaforme aarch64-pc-windows-gnullvm e x86_64-pc-windows-gnullvm. Il terzo livello prevede un supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della possibilità di compilare il codice.
- Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
- bool::then_some
- f32::total_cmp
- f64::total_cmp
- Stdin::lines
- windows::CommandExt::raw_arg
- impl<T: Default> valore di default per AssertUnwindSafe<T>
- From<Rc<str>> per Rc
- From<Arc<str>> per Arc<[u8]>
- FusedIterator per EncodeWide
Fonte: opennet.ru
