È stata pubblicata una nuova versione Rust 1.96.0 — nuova versione stabile del linguaggio di programmazione Rust. L'aggiornamento è stato rilasciato 28 maggio 2026; è possibile installarla con il comando standard rustup update stable. Le principali novità includono nuovi tipi di intervalli in core::range, stabilizzazione delle macro per il controllo delle corrispondenze ai modelli, irrigidimento del comportamento delle build WebAssembly e correzione di due vulnerabilità in Cargo.
Modifiche principali
Nuovi tipi di intervalli core::range::Range*.
Nella libreria standard sono stati stabilizzati nuovi varianti di intervallo: core::range::Range, RangeFrom, RangeInclusive e gli iteratori ad essi associati. A differenza dei vecchi tipi in core::ops, i nuovi intervalli non implementano direttamente Iterator, ma vengono convertiti in un iteratore tramite IntoIterator. Questo consente a tali intervalli di essere Copy, il che è utile, ad esempio, per memorizzare un intervallo come campo di una struttura. La sintassi del tipo 0..1 crea ancora i vecchi tipi di intervallo, ma in una futura versione del linguaggio si prevede di passare ai nuovi tipi.Aggiunti assert_matches! e debug_assert_matches!.
I nuovi macro permettono di verificare che il valore corrisponda a un determinato modello. In sostanza, è simile a assert!(matches!(…)), ma in caso di errore viene visualizzata la rappresentazione Debug del valore, semplificando la diagnosi. I macro non sono stati aggiunti nel prelude per evitare conflitti con i popolari crate di terze parti, quindi devono essere importati esplicitamente da core o std.Comportamento delle destinazioni WebAssembly modificato.
Rust non passa più al linker —allow-undefined per le builds WebAssembly. Ora i simboli indefiniti durante il linking sono considerati un errore, invece di essere automaticamente convertiti in importazioni dal modulo "env". Ciò dovrebbe rilevare prima gli errori di build e i nomi dei simboli errati. Il comportamento precedente può essere ripristinato se necessario tramite RUSTFLAGS=-Clink-arg=—allow-undefined o specificando esplicitamente il modulo wasm importato tramite #[link(wasm_import_module = "env")].Cargo ha ricevuto correzioni di sicurezza.
Modifiche al linguaggio.
Nel rilascio sono inclusi diversi correttivi e ampliamenti: è consentito il passaggio di variabili meta expr delle macro in cfg, è stata corretta la conversione del tipo never nelle tuple, sono stati corretti rari casi di suggerimenti errati per i tipi di output degli argomenti delle funzioni, è stata aggiunta la supporto per registri vettoriali s390x nell'assembly inline, e è nuovamente consentito utilizzare costanti di tipo ManuallyDrop come parametri — questo risolve un regresso apparso in Rust 1.94.0.Modifiche al compilatore e alle piattaforme.
Per le destinazioni Linux su LoongArch è stata inclusa la supporto per la link relaxation — un'ottimizzazione di collegamento che semplifica alcuni salti e chiamate dopo la disposizione del codice. Per riscv64gc-unknown-fuchsia, la configurazione di base è stata aggiornata al profilo RVA22 con supporto per le estensioni vettoriali.Aggiornamenti alla libreria standard.
È stata aggiunta la supporto all'iterazione su intervalli di numeri interi NonZero. Inoltre, è stata corretta la gestione posticipata degli indirizzi host in SGX tramite ToSocketAddr, e nella documentazione e nei contratti interni è stata chiarita la definizione di memoria 'ammissibile per lettura/scrittura': il puntatore nullo è stato escluso dalla definizione generale, mentre le eccezioni sono indicate separatamente per metodi specifici.API stabilizzate.
Tra le interfacce stabilizzate ci sono assert_matches!, debug_assert_matches!, le implementazioni di From<T> per AssertUnwindSafe<T>, LazyCell<T, F> e LazyLock<T, F>, così come nuovi tipi e iteratori di intervalli da core::range, inclusi Range, RangeFrom, RangeToInclusive e i loro iteratori.Cargo: modifiche alle dipendenze e documentazione.
Ora una dipendenza può indicare contemporaneamente un repository Git e un registry alternativo: verrà utilizzata la versione Git in locale, mentre in fase di pubblicazione verrà utilizzata la versione dal registry, in modo simile al comportamento con crates.io. È stata anche aggiunta la supporto per target.’cfg(..)’.rustdocflags nella configurazione di Cargo.Rustdoc ora gestisce in modo più accurato la documentazione.
Le note sulle API deprecate ora vengono visualizzate come normale documentazione, senza la precedente elaborazione speciale tramite white-space: pre-wrap. Inoltre, rustdoc non restituisce più l'avviso lint missing_doc_code_examples per gli elementi all'interno di impl, e nella barra laterale della documentazione i metodi e le funzioni associate sono separati.Possibili incompatibilità.
Nella release ci sono diverse modifiche che potrebbero manifestarsi su codice atipico: è stata corretta la disposizione di alcuni enum #[repr(Int)] in casi estremi, alcune conversioni unsize inutili in Pin sono state vietate, le build WebAssembly ora si arrestano in caso di simboli non definiti, l'attributo stabilizzato per caso #![reexport_test_harness_main] è di nuovo chiuso da un feature gate, il parametro -Csoft-float è stato rimosso e la versione minima esterna di LLVM è stata aumentata a 21. Per AVR, il tipo c_double è stato cambiato in f32, poiché su queste piattaforme C double è di default a 32 bit.
Fonte: linux.org.ru
