Quels sont les types de Rust désignés par une seule apostrophe?

89

J'ai rencontré un certain nombre de types dans Rust désignés par une seule apostrophe:

'static
'r
'a

Quelle est la signification de cette apostrophe? C'est peut-être un modificateur de références ( &)? Typage générique spécifique aux références? Je n'ai aucune idée de l'endroit où se cache la documentation.

Greg Malcolm
la source
1
ceux-ci sont nommés durées de vie: static.rust-lang.org/doc/master/guide-lifetimes.html
Arjan
Le lien dans le commentaire précédent ne fonctionne plus. Je ne sais pas si cela est équivalent: doc.rust-lang.org/book/lifetimes.html
Ellen Spertus
Le lien d'Ellen a également cessé de fonctionner - voici le nouveau (à partir de juin 2019): doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

Réponses:

71

Ce sont les vies nommées de Rust.

Citant le langage de programmation Rust :

Chaque référence dans Rust a une durée de vie, qui est la portée pour laquelle cette référence est valide. La plupart des durées de vie sont implicites et inférées, tout comme la plupart des types de temps sont déduits. De même que lorsque nous devons annoter des types parce que plusieurs types sont possibles, il y a des cas où les durées de vie des références peuvent être liées de différentes manières, donc Rust a besoin que nous annotions les relations à l'aide de paramètres de durée de vie génériques afin de s'assurer que le les références réelles utilisées lors de l'exécution seront définitivement valides.

Les annotations à vie ne modifient pas la durée de vie des références impliquées. De la même manière que les fonctions peuvent accepter n'importe quel type lorsque la signature spécifie un paramètre de type générique, les fonctions peuvent accepter des références avec n'importe quelle durée de vie lorsque la signature spécifie un paramètre de durée de vie générique. Les annotations de durée de vie relient les durées de vie de plusieurs références les unes aux autres.

Les annotations à vie ont une syntaxe légèrement inhabituelle: les noms des paramètres de durée de vie doivent commencer par une apostrophe '. Les noms des paramètres de durée de vie sont généralement tous en minuscules, et comme les types génériques, leurs noms sont généralement très courts. 'aest le nom que la plupart des gens utilisent par défaut. Les annotations de paramètre de &durée de vie vont après le d'une référence et un espace sépare l'annotation de durée de vie du type de la référence.

Autrement dit, une durée de vie se rapproche de la durée d'exécution pendant laquelle les données vers lesquelles une référence pointe sont valides. Le compilateur Rust en déduira de manière conservatrice la durée de vie la plus courte possible pour être sûr. Si vous voulez dire au compilateur qu'une référence dure plus longtemps que l'estimation la plus courte, vous pouvez la nommer en disant que la référence de sortie, par exemple, a la même durée de vie qu'une référence d'entrée donnée.

La 'staticdurée de vie est une vie spéciale, la plus longue de toutes les vies - pour la durée du programme. Un exemple typique est la chaîne "littéraux" qui sera toujours disponible pendant la durée de vie du programme / module.

Vous pouvez obtenir plus d'informations à partir de cette présentation de diapositives , en commençant par la diapositive 29.

Lifetimes in Rust aborde également les durées de vie en profondeur.

quux00
la source