È stato pubblicato il rilascio del linguaggio di programmazione generale Rust 1.67, originariamente sviluppato da Mozilla e ora sostenuto dall'organizzazione no-profit indipendente Rust Foundation. Il linguaggio si concentra sulla gestione sicura della memoria e fornisce strumenti per raggiungere un elevato parallelismo nell'esecuzione delle attività, evitando l'uso di un garbage collector e un runtime (il runtime si limita all'inizializzazione di base e alla 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:
- Per le funzioni async con Future::Output è stata implementata la possibilità di specificare annotazioni "#[must_use]", che generano un avviso in caso di ignorare il valore restituito, aiutando a scoprire errori dovuti alla supposizione che la funzione modificarà i valori invece di restituire un nuovo valore. #[must_use] async fn bar() -> u32 { 0 } async fn caller() { bar().await; } warning: output non utilizzato della futura restituita da `bar` che deve essere usata —> src/lib.rs:5:5 | 5 | bar().await; | ^^^^^^^^^^^ | = nota: `#[warn(unused_must_use)]` attivo per default
- È stata aggiornata l'implementazione delle code FIFO std::sync::mpsc (multi-producer single-consumer) che è stata convertita all'uso del modulo crossbeam-channel mantenendo l'API precedente. La nuova implementazione risolve vari problemi, migliora le prestazioni e semplifica la manutenzione del codice.
- Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
- {integer}::checked_ilog
- {integer}::checked_ilog2
- {integer}::checked_ilog10
- {integer}::ilog
- {integer}::ilog2
- {integer}::ilog10
- NonZeroU*::ilog2
- NonZeroU*::ilog10
- NonZero*::BITS
- L'indicatore «const», che determina la possibilità di utilizzo in qualsiasi contesto al posto delle costanti, è stato applicato nelle funzioni:
- char::from_u32
- char::from_digit
- char::to_digit
- core::char::from_u32
- core::char::from_digit
- È stato implementato un terzo livello di supporto per l'uso di Rust nel kernel Linux (linuxkernel) e per le piattaforme Sony PlayStation 1 (mipsel-sony-psx), PowerPC con AIX (powerpc64-ibm-aix), QNX Neutrino RTOS (aarch64-unknown-nto-qnx710, x86_64-pc-nto-qnx710). Il terzo livello implica supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della possibilità di compilare codice.
In aggiunta, si sottolinea la pubblicazione da parte di ARM di patch che consentono l'uso del linguaggio Rust per lo sviluppo di driver e moduli del kernel Linux, compilati per sistemi basati sull'architettura AArch64.
Fonte: opennet.ru
