
Rust è un linguaggio di programmazione multi-paradigma sviluppato inizialmente da Graydon Hoare presso Mozilla Research, in collaborazione con la comunità open-source. Rust è distribuito con licenza duale (MIT e Apache 2.0). Queste 2 licenze sono utilizzate insieme, offrendo agli sviluppatori la libertà di scegliere quale licenza utilizzare in base alle proprie necessità. Rust si è affermato come uno dei linguaggi più apprezzati per lo sviluppo di software sicuro ed efficiente, particolarmente adatto per sistemi embedded, browser web e componenti di sistema critici.
Rust è alla base dell’innovativo sistema operativo Redox OS, offrendo sicurezza e prestazioni elevate grazie alla sua gestione rigorosa della memoria e al design moderno. In un’ottica futura, Redox OS potrebbe emergere come un potenziale concorrente o addirittura sostituto di GNU/Linux. Sebbene ancora in fase di sviluppo, il progetto continua a guadagnare attenzione per le sue innovazioni e potrebbe ridefinire il panorama dei sistemi operativi nei prossimi anni. Tuttavia, GNU/Linux rimane attualmente una scelta consolidata e ampiamente supportata. Ma il futuro potrebbe riservare una sana competizione!
Rust è anche il cuore del nuovo ambiente desktop COSMIC, sviluppato da System76, progettato per garantire sicurezza, prestazioni eccellenti e ampie possibilità di personalizzazione. COSMIC sfrutta le caratteristiche avanzate di Rust per fornire una gestione ottimizzata della memoria e una migliore interfaccia utente. Tra le funzionalità principali, spiccano la possibilità di personalizzare dock e pannelli, il miglioramento della gestione degli spazi di lavoro e un’attenzione particolare all’accessibilità, come il supporto allo zoom del desktop. Grazie al design modulare e alle prestazioni elevate offerte da Rust, COSMIC si presenta come un ambiente desktop innovativo e adatto alle esigenze degli utenti moderni.
Rust è compatibile con GNU/Linux, Windows, macOS e numerose altre piattaforme, l’ultima versione stabile prima dell’attuale era la 1.85, rilasciata il 20 febbraio 2025.
Novità in Rust 1.86
La nuova versione Rust 1.86, pubblicata ieri, 3 aprile 2025, introduce importanti innovazioni nel sistema dei trait, nella gestione della memoria e nell’ottimizzazione del codice. Si tratta di novità tecniche rivolte principalmente agli addetti ai lavori, ma cercheremo di illustrarle nel modo più chiaro possibile.
Upcasting dei trait object
Una delle innovazioni più rilevanti introdotte con Rust 1.86 è il supporto nativo per l’upcasting dei trait object. In Rust, un trait rappresenta un insieme di comportamenti comuni che un “tipo” (una categoria o struttura di dati che definisce le proprietà e i comportamenti degli elementi gestiti da un programma) può implementare, fungendo da “contratto” che assicura coerenza tra i diversi “tipi”. Con questa nuova funzionalità, quando un trait dipende da un supertrait (il “trait genitore”), è ora possibile effettuare una conversione diretta da un riferimento al trait “figlio” a uno al supertrait.
Nelle versioni precedenti, questa operazione richiedeva la scrittura manuale di metodi aggiuntivi, aumentando la complessità del codice e rendendolo meno intuitivo. L’introduzione del supporto nativo semplifica il processo, rendendo più agevole la gestione delle gerarchie di trait e permettendo agli sviluppatori di scrivere codice più leggibile, chiaro e meno ridondante. Questo miglioramento rappresenta un passo avanti significativo per la programmazione basata sui trait in Rust.
Accesso sicuro a riferimenti mutabili multipli
Rust 1.86 introduce il metodo get_disjoint_mut
per le slice (sezioni di array) e le HashMap. Questo metodo rivoluziona l’accesso concorrente a elementi mutabili, permettendo di ottenere in modo sicuro più riferimenti mutabili contemporaneamente a elementi distinti della stessa collezione. Nelle versioni precedenti, ottenere questo comportamento richiedeva soluzioni complesse o l’uso di unsafe
. Il nuovo metodo garantisce la sicurezza in fase di compilazione, rispettando le regole del borrow checker di Rust che previene gli accessi concorrenti non sicuri alla memoria.
Ottimizzazioni specifiche per CPU
L’attributo #[target_feature]
, precedentemente limitato alle funzioni unsafe
, è ora disponibile anche per funzioni “safe”. Questa modifica permette di ottimizzare sezioni critiche del codice per sfruttare istruzioni specifiche della CPU (come AVX2 o NEON) mantenendo le garanzie di sicurezza di Rust. Gli sviluppatori possono così creare percorsi di esecuzione ottimizzati per diverse architetture senza rinunciare alla sicurezza della memoria.
Maggiore sicurezza in fase di debug
Nella modalità debug di Rust 1.86, sono stati introdotti controlli runtime aggiuntivi progettati per aumentare la sicurezza durante l’esecuzione del codice. Questi controlli verificano che i puntatori utilizzati non siano nulli prima di eseguire operazioni di lettura o scrittura su dati la cui dimensione è maggiore di zero. Inoltre, i controlli vengono applicati anche quando i riferimenti vengono “riprestati” (reborrowed), ovvero quando un riferimento temporaneo viene creato a partire da un altro. Sebbene queste verifiche runtime siano attive solo durante la modalità debug e non sostituiscano le garanzie di sicurezza garantite dal sistema di tipi in fase di compilazione, offrono comunque un ulteriore livello di protezione utile per identificare potenziali problemi durante lo sviluppo, migliorando la qualità del codice.
Avviso per ABI mancanti
Il lint missing_abi
è stato aggiornato al livello di “avviso di default”. Questo significa che, se negli extern block
non viene specificato esplicitamente un ABI (Application Binary Interface, ovvero la convenzione che definisce il modo in cui le funzioni vengono chiamate e i dati scambiati tra linguaggi), come ad esempio l’ABI “C”, il compilatore mostrerà automaticamente un avviso.
Un “lint” è uno strumento o una funzionalità del compilatore progettata per individuare potenziali problemi nel codice, come errori di stile, pratiche rischiose o problematiche che potrebbero causare bug o incompatibilità. In questo caso, il lint missing_abi
aiuta gli sviluppatori a identificare rapidamente situazioni in cui la mancanza di un ABI potrebbe generare problemi di interoperabilità, guidandoli verso una correzione del codice più robusta. Questo aggiornamento riduce i rischi di incompatibilità e migliora la sicurezza del codice nelle integrazioni con linguaggi esterni.
Altre migliorie significative
- Deprecazione del target i586: Il target
i586-pc-windows-msvc
, che faceva riferimento a vecchie architetture prive del supporto per SSE2, verrà rimosso in Rust 1.87. SSE2 (Streaming SIMD Extensions 2) è un set di istruzioni obbligatorio per Windows 10 e fornisce miglioramenti significativi nelle prestazioni. La deprecazione riflette la modernizzazione del supporto fornito da Rust, allineandosi agli standard richiesti dai sistemi operativi contemporanei. Gli sviluppatori che utilizzano questo target dovranno migrare a un target più recente che includa il supporto per SSE2. - Nuove API stabilizzate: Sono state introdotte e stabilizzate nuove API, tra cui:
Float::next_down
eFloat::next_up
, che permettono di ottenere rispettivamente il valore immediatamente precedente o successivo di un numero in virgola mobile, utile per calcoli numerici di precisione.- Varianti di
slice::get_disjoint_mut
, che permettono di accedere contemporaneamente a sezioni separate di una slice (vettore) in modo mutabile, garantendo però la sicurezza tramite il sistema di tipi di Rust. Queste API migliorano la flessibilità e la sicurezza nella manipolazione dei dati. - Funzioni utilizzabili in contesti const: Sono ora disponibili in contesti valutati a tempo di compilazione (ossia in contesti
const
) nuove funzionalità, come: hint::black_box
, una funzione che permette di prevenire ottimizzazioni indesiderate durante i test e benchmarking, anche in costanti.- Nuovi metodi per la divisione delle stringhe, che possono essere utilizzati per elaborare costanti stringa già in fase di compilazione, migliorando le prestazioni e abilitando nuove possibilità di ottimizzazione.
Questi cambiamenti non solo migliorano la funzionalità e le prestazioni del linguaggio, ma rafforzano anche la sua capacità di affrontare esigenze moderne di sviluppo.
Per gli sviluppatori che desiderano approfondire tutte le novità e le correzioni introdotte in questa versione, è disponibile l’annuncio del rilascio di Rust 1.86 sul blog.
Fonte: https://blog.rust-lang.org/2025/04/03/Rust-1.86.0.html
Fonte: https://linuxiac.com/rust-1-86-introduces-major-language-features/
Source: Read More