È stata pubblicata la versione 1.90 del linguaggio di programmazione Rust, originariamente sviluppato dal progetto Mozilla e ora in evoluzione sotto l'egida dell'organizzazione no-profit Rust Foundation. Il linguaggio è focalizzato sulla gestione sicura della memoria e fornisce strumenti per raggiungere un'elevata concorrenza nell'esecuzione delle operazioni, evitando al contempo l'uso di un garbage collector e di 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 di manipolazione dei puntatori e li proteggono da problemi derivanti da operazioni a basso livello con la memoria, come l'accesso a aree di memoria dopo il loro rilascio, la dereferenziazione di puntatori nulli, l'uscita dai limiti del buffer, ecc. Per la distribuzione delle librerie, l'assicurazione della compilazione e la gestione delle dipendenze, il progetto promuove il gestore di pacchetti Cargo. È supportato un repository per l'hosting delle librerie su crates.io.
La gestione sicura della memoria in Rust è garantita durante la compilazione attraverso il controllo dei riferimenti, il tracciamento della proprietà degli oggetti, la considerazione del tempo di vita degli oggetti (ambiti di visibilità) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche strumenti per proteggere da overflow interi, richiede l'inizializzazione obbligatoria 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 minimizzare gli errori logici.
Novità principali:
- Su Linux, nei computer con architettura x86_64, il linker LLD del progetto LLVM è utilizzato per il collegamento dinamico dei pacchetti crate per impostazione predefinita. L'uso di LLD, rispetto al linker BFD, ha portato a un miglioramento delle prestazioni nel collegamento di grandi file eseguibili e progetti con un ampio volume di informazioni di debug, oltre ad accelerare il rebuild incrementale. Nella maggior parte dei casi, LLD è retrocompatibile con BFD. In caso di problemi, è possibile tornare a BFD specificando nella variabile d'ambiente RUSTFLAGS il flag "-C linker-features=-lld" o aggiungendo al file di configurazione .cargo/config.toml: [target.x86_64-unknown-linux-gnu] rustflags = ["-C linker-features=-lld"]
- Nel gestore pacchetti cargo, il comando "publish" implementa l'opzione "—workspace", che consente di pubblicare automaticamente tutti i pacchetti dallo spazio di lavoro selezionato (un insieme di pacchetti che utilizza un unico file Cargo.lock e una directory comune per i risultati della compilazione), mantenendo l'ordine di pubblicazione dei pacchetti e considerando le loro dipendenze.
- Una nuova serie di API è stata trasformata in versioni stabili, inclusi i metodi stabilizzati e le implementazioni delle trait:
- u{n}::checked_sub_signed
- u{n}::overflowing_sub_signed
- u{n}::saturating_sub_signed
- u{n}::wrapping_sub_signed
- impl Copy for IntErrorKind
- impl Hash for IntErrorKind
- impl PartialEq for CStr
- impl PartialEq for CStr
- impl PartialEq<Cow> for CStr
- impl PartialEq for CString
- impl PartialEq for CString
- impl PartialEq<Cow> for CString
- impl PartialEq for Cow
- impl PartialEq for Cow
- impl PartialEq for Cow
- Il segnale «const» è stato applicato nelle funzioni:
- ::reverse
- f32::floor
- f32::ceil
- f32::trunc
- f32::fract
- f32::round
- f32::round_ties_even
- f64::floor
- f64::ceil
- f64::trunc
- f64::fract
- f64::round
- f64::round_ties_even
- Per le piattaforme target basate sulla libreria Musl, attualmente al terzo livello di supporto, il collegamento dinamico è abilitato per impostazione predefinita: mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl e thumbv7neon-unknown-linux-musleabihf.
- La piattaforma target «x86_64-apple-darwin» è stata spostata dal primo livello di supporto al secondo (Apple prevede di interrompere il supporto per l'architettura x86_64). Il primo livello di supporto implica la creazione di build binarie, esecuzione di test approfonditi e la fornitura della massima garanzia di supporto della piattaforma: ogni modifica nel compilatore viene verificata attraverso l'esecuzione dell'intero set di test. Il secondo livello di supporto implica una garanzia di build, ma senza alcuna garanzia durante il superamento del set di test.
In aggiunta, si può notare lo sviluppo da parte di Microsoft di strumenti per la creazione di driver Windows in linguaggio Rust. Su GitHub è già disponibile un set di pacchetti crate per la creazione di driver basati su WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) e UMDF (User-Mode Driver Framework), insieme a servizi Win32, utili per l'uso in Windows 11. L'obiettivo del progetto è fornire agli sviluppatori in linguaggio Rust librerie e funzionalità simili a quelle offerte dagli strumenti WDK per i driver in linguaggio C. Nella fase attuale, gli strumenti di sviluppo per i driver in Rust utilizzano un gran numero di chiamate unsafe durante l'interazione con i sottosistemi Windows, ma in futuro si prevede di preparare astrazioni sicure per le strutture del kernel e DDI (Device Driver Interface). I risultati del progetto sono distribuiti con licenze MIT e Apache 2.0.
Fonte: opennet.ru
