Il comunicato è stato pubblicato Ruggine 1.96.0 — l'ultima versione stabile del linguaggio di programmazione Rust. L'aggiornamento è stato rilasciato. anni 28 maggio 2026Può essere installato utilizzando il comando standard rustup update stable. Le principali modifiche includono nuovi tipi di intervallo in core::range, la stabilizzazione delle macro di corrispondenza dei pattern, il rafforzamento del comportamento di compilazione di WebAssembly e la correzione di due vulnerabilità in Cargo.
Principali cambiamenti
Nuovi tipi di intervallo core::range::Range*.
Nella libreria standard sono stati stabilizzati i nuovi tipi di intervallo: core::range::Range, RangeFrom, RangeInclusive e i relativi iteratori. A differenza dei vecchi tipi di core::ops, i nuovi intervalli non implementano direttamente Iterator, ma vengono convertiti in un iteratore tramite IntoIterator. Ciò consente a questi intervalli di essere copiabili, il che è utile, ad esempio, quando si memorizza un intervallo come campo di una struttura. La sintassi come 0..1 attualmente crea i vecchi tipi di intervallo, ma è previsto che venga migrata ai nuovi tipi in una futura versione del linguaggio.Aggiunti assert_matches! e debug_assert_matches!.
Le nuove macro consentono di verificare che un valore corrisponda a un determinato modello. Il concetto è simile a assert!(matches!(…)), ma in caso di errore viene stampata una rappresentazione di debug del valore, semplificando la diagnostica. Queste macro non sono state aggiunte a Prelude per evitare conflitti con le librerie di terze parti più diffuse, pertanto devono essere importate esplicitamente da core o std.È stato modificato il comportamento dei target WebAssembly.
Rust non passa più l'opzione --allow-undefined al linker per le build WebAssembly. I simboli non definiti vengono ora trattati come errori durante il collegamento, anziché essere convertiti automaticamente in importazioni dal modulo "env". Questo dovrebbe consentire di individuare prima gli errori di compilazione e i nomi di simboli non validi. Il vecchio comportamento può essere ripristinato, se necessario, utilizzando RUSTFLAGS=-Clink-arg=--allow-undefined o specificando esplicitamente il modulo wasm importato tramite #[link(wasm_import_module = "env")].Cargo ha ricevuto aggiornamenti di sicurezza.
Cambiamenti linguistici.
La pubblicazione include: Diverse correzioni e miglioramenti minori: consentito il passaggio di metavariabili expr delle macro a cfg, corretto il casting di tipo never nelle espressioni tuple, corretti rari casi di suggerimenti di inferenza di tipo errati per gli argomenti delle funzioni, aggiunto il supporto per i registri vettoriali s390x nell'assembly inline e riammesso l'uso delle costanti ManuallyDrop come modelli: questo corregge una regressione introdotta in Rust 1.94.0.Modifiche al compilatore e alle piattaforme.
per LinuxIl supporto per il rilassamento dei collegamenti è stato abilitato per i target LoongArch: un'ottimizzazione del collegamento che semplifica alcune transizioni e chiamate dopo la distribuzione del codice. Per riscv64gc-unknown-fuchsia, la configurazione di base è stata aggiornata al profilo RVA22 con supporto per le estensioni vettoriali.Aggiornamenti standard della libreria.
È stato aggiunto il supporto per l'iterazione su intervalli di interi diversi da zero. È stata inoltre corretta la gestione differita degli indirizzi host in SGX tramite ToSocketAddr e la definizione di memoria "leggibile/scrivibile" è stata chiarita nella documentazione e nei contratti interni: il puntatore nullo è stato rimosso dalla definizione generale e le eccezioni sono ora specificate separatamente per metodi specifici.API stabilizzate.
Tra le interfacce stabilizzate ci sono assert_matches!, debug_assert_matches!, implementazioni di From per AssertUnwindSafe , LazyCell e LazyLock , così come nuovi tipi di intervallo e iteratori da core::range, inclusi Range, RangeFrom, RangeToInclusive e i relativi iteratori.Cargo: Modifiche alle dipendenze e alla documentazione.
Ora una dipendenza può specificare sia un repository Git che un registro alternativo: la versione Git verrà utilizzata localmente, mentre la versione del registro verrà utilizzata durante la pubblicazione, in modo simile al comportamento di crates.io. È stato inoltre aggiunto il supporto per target.'cfg(..)'.rustdocflags nella configurazione di Cargo.Rustdoc ora gestisce la documentazione in modo più accurato.
Le note API deprecate vengono ora visualizzate come normale documentazione, senza la precedente elaborazione speciale tramite white-space: pre-wrap. Inoltre, rustdoc non esegue più il linting di missing_doc_code_examples per gli elementi all'interno di impl, e i metodi e le funzioni associate sono ora separati nella barra laterale della documentazione.Possibili incompatibilità.
La release contiene diverse modifiche che potrebbero manifestarsi nel codice non standard: il layout di alcune enumerazioni #[repr(Int)] è stato corretto in casi estremi e alcuni cast di tipo unsize inutili in Pin sono stati disabilitati. Le build WebAssembly ora si bloccano a causa di simboli non definiti, l'attributo #![reexport_test_harness_main] stabilizzato accidentalmente è stato nuovamente sottoposto a feature gated, l'opzione -Csoft-float è stata rimossa e la versione minima di LLVM esterna è stata aumentata a 21. Per AVR, il tipo c_double è stato modificato in f32, poiché i double C sono a 32 bit per impostazione predefinita su questi target.
Fonte: linux.org.ru
