Table of Contents
Rust 1.89, génériques const, programmation, développement logiciel : la version stable 1.89.0 du langage Rust introduit notamment la possibilité d’utiliser « _ » comme argument pour des paramètres génériques const, en déduisant la valeur à partir du contexte environnant, ainsi que d’autres ajustements techniques destinés aux développeurs.
Rust 1.89 : support des génériques const et exemples fournis
L’équipe en charge du développement de Rust a publié la version stable 1.89.0. Parmi les avancées annoncées, Rust accepte désormais « _ » comme argument des paramètres génériques const, en déduisant la valeur à partir du contexte environnant. Les développeurs qui utilisent rustup peuvent obtenir cette version en exécutant rustup update stable.
Les responsables de Rust ont fourni cet exemple pour illustrer le nouveau comportement :
pub fn all_false() -> [bool; LEN] {
[false; _]
}
Ils précisent également les limites de cette fonctionnalité : « Tout comme les règles régissant l’utilisation de « _ » en tant que type, « _ » n’est pas autorisé en tant qu’argument pour les génériques const dans une signature ». L’annonce inclut aussi des exemples de signatures non autorisées :
// This is not allowed
pub const fn all_false()-> [bool; _] {
[false; LEN]
}
// Neither is this
Doctests, cibles wasm et autres changements techniques dans Rust 1.89
Rust 1.89 modifie le comportement des doctests : ils sont désormais exécutés lors d’un cargo test –doc –target other_target. Cette exécution supplémentaire peut entraîner des ruptures pour des doctests « potentiellement défaillants » qui n’étaient pas testés précédemment. Pour éviter d’exécuter un doctest spécifique, il est possible de l’annoter avec ignore-.
L’équipe donne l’exemple d’un doctest ignoré pour une architecture donnée :
/// ignore-x86_64
/// panic!(« something »)
///
pub fn my_function() { }
La version 1.89 succède à la version 1.88, publiée le 26 juin, qui avait introduit le support des fonctions « Naked ».
Liste des autres modifications notables
- i128 et u128 ne déclenchent plus le lint improper_ctypes_definitions : ces types peuvent dorénavant être utilisés dans des fonctions extern « C » sans avertissement.
- Les fonctions extern « C » ciblant wasm32-unknown-unknown disposent désormais d’une ABI conforme aux normes attendues pour cette cible.
- La plateforme x86_64-apple-darwin change de niveau : elle passe du niveau Tier 1 avec outils hôtes au niveau Tier 2 avec outils hôtes.
- Un nouveau lint, mismatched_lifetime_syntax, a été ajouté pour signaler les cas où la même durée de vie est référencée par différentes syntaxes entre les arguments d’une fonction et ses valeurs de retour.
Ces ajustements portent sur des comportements ciblés du compilateur, des lints et des compatibilités d’ABI, et visent à améliorer la robustesse et la portabilité des projets Rust sur diverses cibles.
Compatibilité, mise à jour et précautions pour les développeurs
Les développeurs souhaitant migrer vers Rust 1.89 doivent tenir compte des changements de test mentionnés ci‑dessus, en particulier si leurs dépôts contiennent des doctests non testés auparavant. Pour récupérer la version stable via rustup, la commande fournie par les mainteneurs est simple : rustup update stable.
Enfin, la sortie de Rust 1.89 illustre la continuité des évolutions du langage : chaque version apporte des ajustements syntaxiques et des améliorations de compatibilité sans modifier, dans les exemples fournis, le comportement fondamental du langage au-delà de la déduction des arguments const et des lints associés.