Rust 1.96.0

Pubblicato il rilascio Rust 1.96.0 — una nuova versione stabile del linguaggio di programmazione Rust. L'aggiornamento è uscito 28 maggio 2026; puoi installarlo con il comando standard rustup update stable. Le principali novità includono nuovi tipi di intervalli in core::range, la stabilizzazione dei macro per il controllo delle corrispondenze con i modelli, l'inasprimento del comportamento delle build WebAssembly e la 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 i relativi iteratori. A differenza dei vecchi tipi in core::ops, i nuovi intervalli non implementano direttamente Iterator, ma si trasformano in un iteratore tramite IntoIterator. Di conseguenza, tali intervalli possono essere Copy, il che è comodo, ad esempio, per memorizzare un intervallo come campo di una struttura. La sintassi come 0..1 crea ancora i vecchi tipi di intervallo, ma nella futura revisione del linguaggio è previsto un passaggio ai nuovi tipi.

  • Aggiunti assert_matches! e debug_assert_matches!.
    I nuovi macro consentono di verificare che un valore corrisponda a un determinato modello. In termini di significato, è simile a assert!(matches!(…)), ma in caso di errore viene mostrata la rappresentazione Debug del valore, semplificando la diagnostica. I macro non sono stati aggiunti al prelude per evitare conflitti con le crate di terzi popolari, quindi devono essere importati esplicitamente da core o std.

  • Modificato il comportamento degli obiettivi WebAssembly.
    Rust non passa più al linker —allow-undefined per le build WebAssembly. Ora i simboli non definiti durante il link vengono considerati un errore, invece di essere automaticamente convertiti in importazioni dal modulo "env". Questo dovrebbe identificare in anticipo errori di build e nomi di simboli non corretti. Il vecchio comportamento può essere restituito 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.
    In Rust 1.96.0 sono state risolte due vulnerabilità che colpivano gli utenti di registry di terze parti. CVE-2026-5223 è relativa alla gestione dei symlink all'interno degli archivi tar delle crate: un pacchetto dannoso da un registry di terze parti poteva sovrascrivere la cache di un'altra crate dello stesso registry. A partire da Rust 1.96.0, Cargo rifiuta gli archivi crate con symlink. CVE-2026-5222 è relativa alla normalizzazione degli URL del registry sparse e, in rare condizioni, potrebbe aver portato all'invio del token Cargo a un registry dannoso. Gli utenti di crates.io, secondo il team di Rust, non sono stati colpiti da questi problemi.

  • Modifiche al linguaggio.
    Nel rilascio sono inclusi alcuni correttivi puntuali e ampliamenti: consentito il passaggio di variabili meta-expr dei macro in cfg, corretto il cast di never-type in espressioni tuple, risolti rari casi di suggerimenti errati per il tipo di output per gli argomenti delle funzioni, aggiunto il supporto per i registri vettoriali s390x in assembly inline, e nuovamente consentito l'uso di costanti di tipo ManuallyDrop come template — questo ripara un regresso emerso in Rust 1.94.0.

  • Modifiche al compilatore e alle piattaforme.
    Per le destinazioni Linux su LoongArch è stata abilitata la supporto al link relaxation — un’ottimizzazione del linking che semplifica alcuni salti e riferimenti dopo il posizionamento del codice. Per riscv64gc-unknown-fuchsia, è stata aggiornata la configurazione di base al profilo RVA22 con supporto per le estensioni vettoriali.

  • Aggiornamenti alla libreria standard.
    Aggiunto il supporto per l'iterazione su intervalli di numeri interi NonZero. È stata inoltre corretta la gestione ritardata degli indirizzi host in SGX tramite ToSocketAddr, e nella documentazione e nei contratti interni è stata precisata la definizione della memoria 'consentita per la lettura/scrittura': il puntatore nullo è 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!, implementazioni di From per AssertUnwindSafe, LazyCell e LazyLock, così come nuovi tipi e iteratori di intervallo da core::range, inclusi Range, RangeFrom, RangeToInclusive e i loro iteratori.

  • Cargo: modifiche per le dipendenze e la documentazione.
    Ora una dipendenza può indicare contemporaneamente un repository Git e un registro alternativo: la versione Git verrà utilizzata localmente, mentre durante la pubblicazione verrà utilizzata la versione dal registro, in modo simile al comportamento con crates.io. Inoltre, è stato aggiunto il supporto per target.’cfg(..)’.rustdocflags nella configurazione di Cargo.

  • Rustdoc ha iniziato a gestire la documentazione con maggiore precisione.
    Le note su API deprecate ora vengono visualizzate come documentazione normale, senza la precedente elaborazione speciale tramite white-space: pre-wrap. Inoltre, rustdoc non genera più avvisi missing_doc_code_examples per gli elementi all'interno di impl, e nella barra laterale della documentazione i metodi e le funzioni associate vengono separati distintamente.

  • Possibili incompatibilità.
    Nel rilascio ci sono diverse modifiche che possono manifestarsi su codice atipico: la disposizione di alcuni #[repr(Int)] enum è stata corretta in casi estremi, sono stati vietati alcuni cast unsize inutili in Pin, le build WebAssembly ora si chiudono in caso di simboli non definiti, l'attributo accidentalmente stabilizzato #![reexport_test_harness_main] è stato di nuovo rinchiuso da un gate di funzionalità, è stato rimosso il parametro -Csoft-float e la versione minima di LLVM esterno è stata aumentata a 21. Per AVR, il tipo c_double è stato cambiato in f32, poiché su queste piattaforme il C double è di default a 32 bit.

Fonte: linux.org.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster