Ruggine 1.96.0

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.
    Rust 1.96.0 corregge due vulnerabilità che interessavano gli utenti di registri di terze parti. CVE-2026-5223 Riguardo alla gestione dei collegamenti simbolici all'interno degli archivi tar dei crate: un pacchetto dannoso proveniente da un registro di terze parti potrebbe sovrascrivere la cache di un altro pacchetto dello stesso registro. A partire da Rust 1.96.0, Cargo rifiuta gli archivi di crate contenenti collegamenti simbolici. CVE-2026-5222 Questo problema riguarda la normalizzazione degli URL nel registro sparse e, in rare circostanze, potrebbe comportare l'invio di un token Cargo a un registro dannoso. Secondo il team di Rust, gli utenti di crates.io non sono interessati da questi problemi.

  • 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

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