Rouille 1.96.0

Le communiqué a été publié Rouille 1.96.0 — la dernière version stable du langage de programmation Rust. La mise à jour est disponible. 28 mai 2026 annéeIl peut être installé à l'aide de la commande standard `rustup update stable`. Les principales modifications comprennent de nouveaux types de plages dans `core::range`, la stabilisation des macros de correspondance de motifs, un comportement de compilation WebAssembly plus strict et la correction de deux vulnérabilités dans Cargo.

Changements majeurs

  • Nouveaux types de plage : core::range::Range*.
    De nouveaux types d'intervalles ont été stabilisés dans la bibliothèque standard : `core::range::Range`, `RangeFrom`, `RangeInclusive` et leurs itérateurs associés. Contrairement aux anciens types de `core::ops`, ces nouveaux intervalles n'implémentent pas directement `Iterator`, mais sont convertis en itérateur via `IntoIterator`. Cela permet de les copier, ce qui est pratique, par exemple, pour stocker un intervalle comme champ de structure. La syntaxe `0..1` crée actuellement les anciens types d'intervalles, mais une migration vers les nouveaux types est prévue dans une version ultérieure du langage.

  • Ajout de assert_matches! et debug_assert_matches!.
    De nouvelles macros permettent de vérifier qu'une valeur correspond à un modèle donné. Le principe est similaire à `assert!(matches!(…))`, mais en cas d'erreur, une représentation de débogage de la valeur est affichée, simplifiant ainsi le diagnostic. Ces macros n'ont pas été intégrées à Prelude afin d'éviter les conflits avec les bibliothèques tierces courantes ; elles doivent donc être importées explicitement depuis `core` ou `std`.

  • Comportement des cibles WebAssembly modifié.
    Rust ne transmet plus l'option `--allow-undefined` à l'éditeur de liens pour les compilations WebAssembly. Les symboles non définis sont désormais traités comme des erreurs lors de l'édition de liens, au lieu d'être automatiquement convertis en importations du module « env ». Cela permet de détecter plus tôt les erreurs de compilation et les noms de symboles invalides. Le comportement précédent peut être rétabli, si nécessaire, en utilisant `RUSTFLAGS=-Clink-arg=--allow-undefined` ou en spécifiant explicitement le module WebAssembly importé avec `#[link(wasm_import_module = "env")]`.

  • Cargo a bénéficié de correctifs de sécurité.
    Rust 1.96.0 corrige deux vulnérabilités affectant les utilisateurs de registres tiers. CVE-2026-5223 Concernant la gestion des liens symboliques dans les archives tar des crates : un paquet malveillant provenant d’un registre tiers pourrait écraser le cache d’un autre paquet du même registre. À partir de Rust 1.96.0, Cargo rejette les archives de crates contenant des liens symboliques. CVE-2026-5222 Ce problème est lié à la normalisation des URL dans le registre Sparse et pourrait, dans de rares cas, entraîner l'envoi d'un jeton Cargo à un registre malveillant. Selon l'équipe Rust, les utilisateurs de crates.io ne sont pas concernés.

  • Changements de langue.
    Cette version comprend : Plusieurs corrections et améliorations mineures : autorisation de passer des métavariables expr de macros à cfg, correction du transtypage never-type dans les expressions de tuple, correction de rares cas d’indications d’inférence de type incorrectes pour les arguments de fonction, ajout de la prise en charge des registres vectoriels s390x dans l’assembleur en ligne et réautorisation des constantes ManuallyDrop en tant que modèles — ceci corrige une régression introduite dans Rust 1.94.0.

  • Modifications apportées au compilateur et aux plateformes.
    Pour LinuxLa prise en charge de l'assouplissement des liens est désormais activée pour les cibles LoongArch ; il s'agit d'une optimisation de liaison qui simplifie certaines transitions et certains appels après le déploiement du code. Pour riscv64gc-unknown-fuchsia, la configuration de base a été mise à jour vers le profil RVA22 avec prise en charge des extensions vectorielles.

  • Mises à jour standard de la bibliothèque.
    La prise en charge de l'itération sur des plages d'entiers non nuls a été ajoutée. La gestion différée des adresses hôtes dans SGX via ToSocketAddr a également été corrigée, et la définition de la mémoire « lisible/inscriptible » a été clarifiée dans la documentation et les contrats internes : le pointeur nul a été supprimé de la définition générale, et les exceptions sont désormais spécifiées séparément pour chaque méthode.

  • API stabilisées.
    Parmi les interfaces stabilisées figurent assert_matches!, debug_assert_matches!, des implémentations de From pour AssertUnwindSafe , LazyCell et LazyLock , ainsi que de nouveaux types de plages et itérateurs de core::range, notamment Range, RangeFrom, RangeToInclusive et leurs itérateurs.

  • Cargo : Modifications apportées aux dépendances et à la documentation.
    Il est désormais possible de spécifier à la fois un dépôt Git et un registre alternatif pour une dépendance : la version Git sera utilisée localement, et la version du registre lors de la publication, comme avec crates.io. La prise en charge de target.'cfg(..)'.rustdocflags dans la configuration Cargo a également été ajoutée.

  • Rustdoc gère désormais la documentation avec plus de précision.
    Les notes relatives aux API obsolètes sont désormais affichées comme une documentation classique, sans le traitement spécial précédent lié à l'espace blanc avant le retour à la ligne. De plus, rustdoc ne vérifie plus les exemples de code manquants dans les éléments `impl`, et les méthodes et fonctions associées sont maintenant séparées dans la barre latérale de documentation.

  • Incompatibilités possibles.
    Cette version contient plusieurs modifications qui peuvent apparaître dans du code non standard : la disposition de certaines énumérations #[repr(Int)] a été corrigée dans des cas extrêmes, et certains casts inutiles de taille indéfinie dans Pin ont été désactivés. Les compilations WebAssembly plantent désormais sur les symboles non définis, l'attribut #![reexport_test_harness_main], stabilisé par erreur, est de nouveau soumis à des restrictions de fonctionnalités, l'option -Csoft-float a été supprimée et la version minimale de LLVM externe a été augmentée à 21. Pour AVR, le type c_double a été changé en f32, car les doubles C sont 32 bits par défaut sur ces cibles.

Source: linux.org.ru

Achetez un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Achetez un hébergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster