Rust 1.81.0 publié : voici les nouveautés et comment le mettre à jour
L'équipe Rust a publié Rust 1.81.0, introduisant une série d'améliorations à la stabilité, la performance et l'expérience développeur du langage.
Rust 1.81.0 est livré avec plusieurs nouvelles fonctionnalités et améliorations, y compris la stabilisation du Error trait dans core, le rendant disponible pour une utilisation dans les bibliothèques #![no_std].
Les algorithmes de tri de la bibliothèque standard ont été mis à jour pour améliorer les performances, et un nouveau niveau de lint, expect, a été ajouté pour permettre aux développeurs de noter explicitement où un lint particulier devrait se produire.
De plus, plusieurs API ont été stabilisées, y compris char::from_u32_unchecked, CStr::count_bytes et CStr::from_ptr.
Cette version inclut également un certain nombre de notes de compatibilité, y compris des modifications du crochet de panique et des arguments du gestionnaire de panique, le comportement par défaut des paniques non interceptées dans les fonctions extern "C", et la dénomination de cible WASI 0.1.
Enfin, la mise à jour inclut une correction pour la CVE-2024-43402, qui affectait la manière dont std::process::Command gère les arguments lors de l'exécution de fichiers batch sur Windows.
Discutons de ces nouvelles fonctionnalités en détail.
Quoi de neuf dans Rust 1.81.0
Cette nouvelle version apporte plusieurs améliorations clés, notamment :
1. Stabilisation de core::error::Error :
Rust 1.81.0 stabilise le trait Error dans la bibliothèque core, le rendant utilisable dans les bibliothèques #![no_std]. Cela permet une standardisation plus large sur le même trait Error à travers l'écosystème Rust, indépendamment de l'environnement cible.
2. Nouvelles implémentations de tri :
Les implémentations de tri stable et instable dans la bibliothèque standard bénéficient toutes deux d'algorithmes mis à jour, ce qui entraîne une amélioration des performances d'exécution et des temps de compilation.
Les algorithmes mis à jour détectent également de manière active et provoquent une panique en cas d'implémentations incorrectes de Ord, empêchant des comportements inattendus et encourageant les développeurs à maintenir des implémentations d'ordre correctes.
3. Introduction de #[expect(lint)] :
Ce nouveau niveau de lint permet aux développeurs de noter explicitement quand un lint particulier devrait se produire, émettant un avertissement s'il ne se produit pas.
Ceci est utile pour désactiver temporairement une vérification de code en raison d'une refactorisation en cours ou de bogues dans l'implémentation de la vérification, tout en continuant à rester conscient du moment où il faut traiter cette vérification.
Par exemple, lors de la migration d'une base de code pour se conformer à une nouvelle restriction imposée par un lint Clippy, les développeurs peuvent utiliser #[expect(lint)] pour suivre les progrès et s'assurer que le lint peut être appliqué une fois que la base de code est conforme.
4. Raisons de lint :
Les développeurs peuvent désormais fournir des raisons lorsqu'ils modifient les niveaux de lint. Ces raisons sont incluses dans les messages du compilateur, offrant contexte et clarté aux autres développeurs qui pourraient rencontrer le lint à l'avenir.
Par exemple, si un projet désactive l'arithmétique en virgule flottante en utilisant #![deny(clippy::float_arithmetic)] en raison de son exécution dans un environnement sans support pour les nombres à virgule flottante, une raison peut être ajoutée pour expliquer cette décision directement dans le code.
5. API stabilisées et expansion du contexte const :
Rust 1.81.0 stabilise plusieurs API, y compris core::error, hint::assert_unchecked et fs::exists. De plus, davantage d'API, telles que char::from_u32_unchecked et CStr::from_ptr, sont désormais stables dans les contextes const, élargissant la fonctionnalité disponible dans les contextes const.
6. Sécurité et Compatibilité Améliorées :
Rust 1.81.0 apporte une série de changements pour améliorer la sécurité et la compatibilité. Ceux-ci incluent la séparation des arguments du crochet de panique et du gestionnaire de panique, l'abandon en cas de paniques non interceptées dans les fonctions extern "C" (encourageant l'utilisation des variantes ABI suffixées -unwind pour le déroulement des erreurs à travers les limites ABI), et le renommage de la cible WASI 0.1 de wasm32-wasi en wasm32-wasip1 (avec des plans pour supprimer wasm32-wasi en janvier 2025).
Au-delà de ces changements majeurs, Rust 1.81.0 inclut une correction pour la CVE-2024-43402, garantissant l'échappement correct des arguments lors de l'invocation de fichiers batch sur Windows en utilisant std::process::Command.
Cette version comprend également une variété d'autres améliorations et corrections de bogues dans Rust, Cargo et Clippy.
Mettre à niveau vers Rust 1.81.0 sous Linux
Pour mettre à jour vers la version 1.81.0 de Rust, vous pouvez utiliser l'outil rustup. Si vous avez installé une version précédente de Rust en utilisant rustup, vous pouvez passer à la version 1.81.0 en exécutant la commande suivante dans votre terminal sous Linux :
$ rustup update stableSi vous n'avez pas encore rustup installé, vous pouvez le télécharger depuis le site officiel de Rust et l'installer comme indiqué dans le lien suivant :
- Comment installer le langage de programmation Rust sur Linux
Ressource:
- Annonce de Rust 1.81.0