Annexe A : les mots-clés
La liste suivante contient 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”), y compris pour 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 instructionsuse
etextern crate
async
- retourne unFuture
plutôt que de bloquer la tâche en coursawait
- met en pause l'exécution jusqu'à ce que le résultat d'unFuture
soit 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
- crée un lien vers une crate externe ou une variable de macro qui représente la crate dans laquelle la macro est définiedyn
- utilisation dynamique d'un objet traitelse
- une branche de repli pour les structures de contrôle de fluxif
etif let
enum
- 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 bouclefor
let
- 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 blocsimpl
ou 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 actuellement aucune fonctionnalité mais sont réservés par Rust pour une potentielle utilisation future.
abstract
become
box
do
final
macro
override
priv
try
typeof
unsized
virtual
yield
Les identificateurs bruts
Un identificateur brut est une syntaxe qui vous permet d'utiliser des
mots-clés là où ils ne devraient pas 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é. 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
l'édition 2018. Si vous dépendez d'une bibliothèque qui était écrite avec
l'édition 2015 et qui avait une fonction try
, vous allez avoir besoin dans ce cas
d'utiliser la syntaxe d'identificateur brut r#try
pour faire
appel à cette fonction à partir de code écrit avec l'édition 2018. Voir
l'annexe E pour en savoir plus sur les éditions.