Rust 1.96.0

È 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.
    Nella versione Rust 1.96.0 sono state risolte due vulnerabilità che interessano gli utenti di registri third-party. CVE-2026-5223 è collegata alla gestione dei symlink all'interno degli archivi tar dei crate: un pacchetto dannoso da un registro terzo potrebbe riscrivere la cache di un altro pacchetto dallo stesso registro. A partire da Rust 1.96.0, Cargo rifiuta archivii di crate con symlink. CVE-2026-5222 è legato alla normalizzazione degli URL del registry sparse e, in rare circostanze, potrebbe portare all'invio di un token Cargo a un registry malevolo. Gli utenti di crates.io, secondo quanto dichiarato dal team di Rust, non sono stati colpiti da questi problemi.

  • 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

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