Annexe A : mots-clés
Les listes suivantes contiennent des mots-clés réservés qui sont actuellement utilisés dans le langage Rust ou qui pourraient l’être à l’avenir. De ce fait, ils ne peuvent pas être utilisés comme identificateurs (sauf comme identificateurs bruts, ce que nous allons voir dans la section “Les identificateurs bruts”. Les identificateurs sont les noms de fonctions, de variables, de paramètres, de champs de structures, de modules, de crates, de constantes, de macros, de valeurs statiques, d’attributs, de types, de traits ou de durées de vie.
Les mots-clés actuellement utilisés
Les mots-clés suivants ont actuellement la fonction décrite.
as: effectue une transformation de type primitive, précise le trait qui contient un élément ou renomme des éléments dans les instructionsuseasync: retourne unFutureplutôt que de bloquer la tâche en coursawait: met en pause l’exécution jusqu’à ce que le résultat d’unFuturesoit disponiblebreak: sort immédiatement d’une boucleconst: définit des éléments constants ou des pointeurs bruts constantscontinue: passe directement à la prochaine itération de la boucle en courscrate: dans un chemin de module, désigne la crate racine (root)dyn: utilisation dynamique d’un objet traitelse: une branche de repli pour les structures de contrôle de fluxifetif letenum: définit une énumérationextern: crée un lien vers une crate, une fonction ou une variable externefalse: le littéral qui vaut “faux” pour un booléenfn: définit une fonction ou le type pointeur de fonctionfor: crée une boucle sur les éléments d’un itérateur, implémente un trait, ou renseigne une durée de vie de niveau supérieurif: une branche liée au résultat d’une expression conditionnelleimpl: implémente des fonctionnalités propres à un élément ou à un traitin: fait partie de la syntaxe de la boucleforlet: lie une valeur à une variableloop: fait une boucle sans condition (théoriquement infinie)match: compare une valeur à des motifsmod: définit un modulemove: fait en sorte qu’une fermeture prenne possession de tout ce qu’elle utilisemut: autorise la mutabilité sur des références, des pointeurs bruts ou des éléments issus de motifspub: autorise la visibilité publique sur des champs de structures, des blocsimplou des modulesref: lie une valeur avec une référencereturn: retourne une valeur depuis une fonctionSelf: un alias de type pour le type que nous définissons ou implémentonsself: désigne le sujet d’une méthode ou du module courantstatic: une variable globale ou une durée de vie qui persiste tout au long de l’exécution du programmestruct: définit une structuresuper: le module parent du module couranttrait: définit un traittrue: le littéral qui vaut “vrai” pour un booléentype: définit un alias de type ou un type associéunion: définit une union mais n’est un mot-clé que lorsqu’il est utilisé dans la déclaration d’une unionunsafe: autorise du code, des fonctions, des traits ou des implémentations non sécuriséesuse: importe des éléments dans la portéewhere: indique des conditions pour contraindre un typewhile: crée une boucle en fonction des résultats d’une expression
Les mots-clés réservés pour une utilisation future
Les mots-clés suivants n’offrent pas encore de fonctionnalités mais sont réservés par Rust pour une possible utilisation future.
abstractbecomeboxdofinalgenmacrooverrideprivtrytypeofunsizedvirtualyield
Les identificateurs bruts
Les identificateurs bruts sont la syntaxe qui vous permet d’utiliser des mots-clés là où ils ne devraient pas normalement pouvoir l’être. Vous pouvez utiliser un identificateur brut en faisant précéder un mot-clé par un r#.
Par exemple, match est un mot-clé. Si vous essayez de compiler la fonction suivante qui utilise match comme nom :
Fichier : src/main.rs
fn match(aiguille: &str, botte_de_foin: &str) -> bool {
botte_de_foin.contains(aiguille)
}
… vous allez obtenir l’erreur suivante :
error: expected identifier, found keyword `match`
--> src/main.rs:4:4
|
4 | fn match(aiguille: &str, botte_de_foin: &str) -> bool {
| ^^^^^ expected identifier, found keyword
L’erreur montre que vous ne pouvez pas utiliser le mot-clé match comme identificateur de la fonction. Pour utiliser match comme nom de fonction, vous devez utiliser la syntaxe d’identificateur brut, comme ceci :
Fichier : src/main.rs
fn r#match(aiguille: &str, botte_de_foin: &str) -> bool {
botte_de_foin.contains(aiguille)
}
fn main() {
assert!(r#match("rem", "lorem ipsum"));
}
Ce code va se compiler sans erreur. Remarquez le préfixe r# sur le nom de la fonction dans sa définition mais aussi lorsque cette fonction est appelée dans main.
Les identificateurs bruts vous permettent d’utiliser n’importe quel mot de votre choix comme identificateur, même si ce mot est un mot-clé réservé. Ceci nous octroie plus de liberté pour choisir des noms d’identifiants, et cela permet aussi de s’intégrer avec des programmes écrits dans un autre langage où ces mots ne sont pas des mots-clés. De plus, les identificateurs bruts vous permettent d’utiliser des bibliothèques écrites dans des éditions de Rust différentes de celle qu’utilise votre crate. Par exemple, try n’est pas un mot-clé dans l’édition 2015, mais il l’est dans les éditions 2018, 2021 et 2024. Si vous dépendez d’une bibliothèque qui était écrite avec l’édition 2015 et qui avait une fonction try, vous devrez alors utiliser la syntaxe d’identificateur brut, r#try dans ce cas, pour faire appel à cette fonction à partir de votre code écrit avec des éditions ultérieures. Voir l’annexe E pour en savoir plus sur les éditions.