La version 1.72.0 de Rust, le langage de programmation multi-paradigme, est disponible, et intègre plusieurs améliorations ainsi que des API stabilisées

L'équipe Rust est heureuse d'annoncer une nouvelle version de Rust, 1.72.0. Rust est un langage de programmation permettant à chacun de construire des logiciels fiables et efficaces.

Si vous avez une version précédente de Rust installée via rustup, vous pouvez obtenir la version 1.72.0 avec :


Si vous ne l'avez pas encore, vous pouvez obtenir rustup à partir de la page appropriée sur le site web, et consulter les notes de version détaillées pour la 1.72.0 sur GitHub.

Si vous souhaitez aider en testant les futures versions, vous pouvez envisager de mettre à jour localement pour utiliser le canal beta (rustup default beta) ou le canal nightly (rustup default nightly). N'hésitez pas à signaler les bugs que vous pourriez rencontrer !


Ce qu'il y a dans la version 1.72.0 stable

Rust rapporte les éléments potentiellement utiles des cfg désactivés dans les erreurs

Vous pouvez activer le code Rust de manière conditionnelle en utilisant cfg, par exemple pour fournir certaines fonctions uniquement avec certaines fonctionnalités de la caisse, ou uniquement sur des plateformes particulières. Auparavant, les éléments désactivés de cette manière étaient effectivement invisibles pour le compilateur. Maintenant, cependant, le compilateur se souviendra du nom et des conditions cfg de ces éléments, de sorte qu'il peut signaler (par exemple) si une fonction que vous avez essayé d'appeler n'est pas disponible parce que vous devez activer une fonctionnalité crate.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   Compiling my-project v0.1.0 (/tmp/my-project)
error[E0432]: unresolved import `rustix::io_uring`
   --> src/main.rs:1:5
    |
1   | use rustix::io_uring;
    |     ^^^^^^^^^^^^^^^^ no `io_uring` in the root
    |
note: found an item that was configured out
   --> /home/username/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rustix-0.38.8/src/lib.rs:213:9
    |
213 | pub mod io_uring;
    |         ^^^^^^^^
    = note: the item is gated behind the `io_uring` feature
 
For more information about this error, try `rustc --explain E0432`.
error: could not compile `my-project` (bin "my-project") due to previous error

Le temps d'évaluation des const est désormais illimité

Pour éviter que l'évaluation des const fournie par l'utilisateur n'entre dans une boucle infinie au moment de la compilation ou ne prenne un temps illimité au moment de la compilation, Rust limitait auparavant le nombre maximum d'instructions exécutées dans le cadre de l'évaluation d'une constante donnée. Cependant, un code Rust particulièrement créatif pouvait dépasser ces limites et produire une erreur de compilation. Pire encore, le fait que le code atteigne la limite pouvait varier considérablement en fonction des bibliothèques invoquées par l'utilisateur ; si une bibliothèque que vous invoquiez divisait une instruction en deux dans l'une de ses fonctions, votre code pouvait alors échouer à la compilation.

Désormais, vous pouvez effectuer un nombre illimité d'évaluations de constantes au moment de la compilation. Pour éviter les longues compilations sans retour d'information, le compilateur émettra toujours un message après que votre code en temps de compilation ait été exécuté pendant un certain temps, et répétera ce message après une période qui double à chaque fois. Par défaut, le compilateur émettra également un lint (const_eval_long_running) après un grand nombre d'étapes pour détecter les boucles infinies, mais vous pouvez allow(const_eval_long_running) pour permettre une évaluation const particulièrement longue.

Listes de Clippy rehaussées

Plusieurs éléments de Clippy ont été intégrés à rustc :
  • clippy::undropped_manually_drops vers undropped_manually_drops (deny)
    • ManuallyDrop ne laisse pas tomber sa valeur interne, donc appeler std::mem::drop dessus ne fait rien. À la place, la note suggérera ManuallyDrop::into_inner en premier, ou vous pouvez utiliser ManuallyDrop::drop pour exécuter le destructeur in-place. Cette indication est refusée par défaut.
  • clippy::invalid_utf8_in_unchecked vers invalid_from_utf8_unchecked (deny) et invalid_from_utf8 (warn)
    • Le premier vérifie les appels à std::str::from_utf8_unchecked et std::str::from_utf8_unchecked_mut avec un littéral UTF-8 invalide, qui viole leurs préconditions de sécurité, ce qui entraîne un comportement indéfini. Cette vérification est refusée par défaut.
    • La seconde vérifie les appels à std::str::from_utf8 et std::str::from_utf8_mut avec un littéral UTF-8 invalide, ce qui renvoie toujours une erreur. Cette lint est un avertissement par défaut.
  • clippy::cmp_nan vers invalid_nan_comparisons (warn)
    • Ceci vérifie les comparaisons avec f32::NAN ou f64::NAN comme l'un des opérandes. NaN ne se compare pas de manière significative à quoi que ce soit - pas même à lui-même - donc ces comparaisons sont toujours fausses. Cette indication est un avertissement par défaut, et suggère d'appeler la méthode is_nan() à la place.
  • clippy::cast_ref_to_mut vers invalid_reference_casting (allow)
    • Ceci vérifie les cast de &T vers &mut T sans utiliser la mutabilité intérieure, ce qui est un comportement immédiat non défini, même si la référence est inutilisée. Cette vérification est actuellement autorisée par défaut en raison des faux positifs potentiels, mais il est prévu qu'elle soit refusée par défaut dans la version 1.73 après amélioration de l'implémentation.

API stabilisées


Ces API sont désormais stables dans les contextes constants :


Autres changements

Découvrez tout ce qui a changé dans Rust, Cargo et Clippy.

Compatibilité future avec Windows

Dans une prochaine version, il est prévu d'augmenter la version minimale de Windows supportée à 10. La proposition acceptée dans le compilateur MCP 651 est que Rust 1.75 sera le dernier à supporter officiellement Windows 7, 8 et 8.1. Lorsque Rust 1.76 sera publié en février 2024, seules les versions 10 et ultérieures de Windows seront prises en charge en tant que cibles de niveau 1. Ce changement s'appliquera à la fois en tant que compilateur hôte et en tant que cible de compilation.

Source : Rust

Et vous?

Que pensez-vous de cette version de Rust ?

Quelles fonctionnalités trouvez-vous intéressantes ?

Voir aussi

Le langage Rust se dote d'un Conseil de direction suite aux plaintes de la communauté concernant des lacunes en matière de gouvernance et la création d'un fork du langage par des protestataires

L'équipe Rust annonce une nouvelle version de Rust, 1.71.0. Rust est un langage de programmation permettant à chacun de construire des logiciels fiables et efficaces

Rust 1.70.0, la nouvelle version du langage de programmation, est désormais disponible, et apporte plusieurs fonctionnalités stabilisées et une activation par défaut du protocole sparse de Cargo

Rust 1.69.0, la dernière version du langage de programmation multi-paradigme, est disponible, et inclut de nombreuses petites améliorations