La version 1.76.0 de Rust, le langage de programmation compilé multi-paradigme, est disponible, et apporte une nouvelle documentation sur la compatibilité ABI, ainsi que d'autres améliorations

L'équipe Rust est heureuse d'annoncer une nouvelle version de Rust, 1.76.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.76.0 avec :


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

Si vous souhaitez aider l'équipe 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.


Contenu de la version 1.76.0 stable

Cette version est relativement mineure, mais comme toujours, même les améliorations incrémentales conduisent à un ensemble plus grand. Quelques-uns de ces changements sont mis en évidence ci-dessous, et d'autres peuvent encore répondre à des besoins plus spécifiques.

Mises à jour de la compatibilité ABI

Une nouvelle section sur la compatibilité ABI dans la documentation sur les pointeurs de fonction décrit ce que cela signifie pour les signatures de fonction d'être compatibles avec l'ABI. Une grande partie de cette section concerne la compatibilité des types d'arguments et des types de retour, avec une liste de ceux qui sont actuellement considérés comme compatibles en Rust. Pour l'essentiel, cette documentation n'ajoute pas de nouvelles garanties, mais se contente de décrire l'état actuel de la compatibilité.

La seule nouveauté est qu'il est maintenant garanti que char et u32 sont compatibles avec l'ABI. Ils ont toujours eu la même taille et le même alignement, mais ils sont maintenant considérés comme équivalents même dans l'ABI des appels de fonction, en accord avec la documentation ci-dessus.

Noms de types à partir des références

À des fins de débogage, any::type_name::<T>() est disponible depuis Rust 1.38 pour renvoyer une chaîne de caractères décrivant le type T, mais cela nécessite un paramètre de type explicite. Il n'est pas toujours facile de spécifier ce type, en particulier pour les types sans nom comme les fermetures ou pour les types de retour opaques. Le nouveau any::type_name_of_val(&T) offre un moyen d'obtenir un nom descriptif à partir de n'importe quelle référence à un type.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
fn get_iter() -> impl Iterator<Item = i32> {
    [1, 2, 3].into_iter()
}
 
fn main() {
    let iter = get_iter();
    let iter_name = std::any::type_name_of_val(&iter);
    let sum: i32 = iter.sum();
    println!("The sum of the `{iter_name}` is {sum}.");
}

Ceci s'imprime actuellement :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
The sum of the `core::array::iter::IntoIter<i32, 3>` is 6.

Source : "Announcing Rust 1.76.0" (Rust)

Et vous ?

Que pensez-vous de cette nouvelle version du langage Rust ?

Voir aussi :

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

Les mainteneurs et les contributeurs du projet Rust seraient confrontés à un problème d'épuisement professionnel, selon une ancienne contributrice au projet Rust