Arriva Rust 1.90! L’era del C++ volge al termine?
È stata pubblicata la versione 1.90 del linguaggio di programmazione Rust. Continua a essere sviluppato sotto la gestione della Rust Foundation, un’organizzazione no-profit, originariamente creata da Mozilla. Rust si posiziona come un linguaggio memory-safe e fornisce strumenti per l’esecuzione parallela senza l’uso di garbage collection.
Il controllo sulla proprietà degli oggetti, sul loro ambito di visibilità e sulla correttezza dell’accesso alla memoria è integrato nel compilatore stesso. Questo approccio elimina un’intera classe di errori: dai buffer overflow e dai dereferenziamenti dei puntatori nulli all’accesso alle aree di memoria libere. Inoltre, il linguaggio protegge dagli integer overflow, richiede l’inizializzazione delle variabili prima dell’uso, implementa valori predefiniti immutabili e una tipizzazione statica forte, riducendo il rischio di errori logici.
Il gestore di pacchetti Cargo rimane lo strumento chiave dell’ecosistema, gestendo build e dipendenze. Il repository crates.io viene utilizzato per la pubblicazione delle librerie.
La nuova versione presenta un meccanismo di pubblicazione migliorato: il comando cargo publish ora ha un flag –workspace, che consente di scaricare tutti i pacchetti da un’area di lavoro condivisa in un’unica operazione, tenendo conto del loro ordine e delle dipendenze.
Tra le innovazioni tecniche, vale la pena notare il passaggio al linker LLD del progetto LLVM per il collegamento dinamico dei pacchetti Linux su x86_64. Questa soluzione velocizza la compilazione di progetti di grandi dimensioni, soprattutto quando si lavora con grandi quantità di informazioni di debug, e migliora significativamente anche la velocità delle ricompilazioni incrementali. La compatibilità con il precedente linker BFD viene mantenuta e, se è necessario ripristinare le impostazioni predefinite, è possibile utilizzare l’impostazione della variabile d’ambiente RUSTFLAGS con il parametro “-C linker-features=-lld” o modificare il file .cargo/config.toml.
Un intero blocco di funzioni è stato spostato nell’API stabile. I metodi u{n}::checked_sub_signed, u{n}::overflowing_sub_signed, u{n}::saturating_sub_signed e u{n}::wrapping_sub_signed sono ora supportati. Le implementazioni Copy e Hash per IntErrorKind sono state stabilizzate, così come diverse opzioni di confronto per i tipi CStr, CString e Cow. Inoltre, il flag const è stato aggiunto a diverse funzioni in virgola mobile, tra cui floor, ceil, trunc, fract e round sia per f32 che per f64.
Le modifiche hanno interessato anche le piattaforme supportate. Il collegamento dinamico è abilitato di default per diversi sistemi target basati sulla libreria Musl, tra cui mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl e riscv32gc-unknown-linux-musl. Allo stesso tempo, la piattaforma x86_64-apple-darwin è stata declassata dal livello di supporto 1 al livello di supporto 2.
Ciò è dovuto ai piani di Apple di deprecare l’architettura x86_64. La compilazione su macOS è ora garantita, ma non sarà supportata una suite di test completa.
Un’area di sviluppo separata è legata a Windows. Microsoft sta promuovendo un progetto per creare un set di librerie per lo sviluppo di driver in Rust. Pacchetti per lavorare con WDM, KMDF e UMDF, nonché per la creazione di servizi Win32 compatibili con Windows 11, sono già disponibili su GitHub. Attualmente, il toolkit richiede ancora chiamate non sicure per interagire con i componenti interni del sistema, ma in futuro è prevista l’aggiunta di astrazioni che impediscano l’uso diretto di codice non sicuro. Il progetto è distribuito con licenze MIT e Apache 2.0.
Rust 1.90 consolida la posizione del linguaggio come strumento focalizzato sullo sviluppo sicuro e su progetti su larga scala. La combinazione di nuove funzionalità’, una libreria standard ampliata e un orientamento verso la programmazione su Windows dimostra che il linguaggio continua a evolversi attivamente in diversi ecosistemi.
L'articolo Arriva Rust 1.90! L’era del C++ volge al termine? proviene da il blog della sicurezza informatica.