Welche Rosttypen werden mit einem einzelnen Apostroph bezeichnet?

85

Ich habe in Rust eine Reihe von Typen gefunden, die mit einem einzigen Apostroph gekennzeichnet sind:

'static
'r
'a

Welche Bedeutung hat dieser Apostroph? Vielleicht ist es ein Modifikator von Referenzen ( &)? Generische typspezifische Eingabe? Ich habe keine Ahnung, wo sich die Dokumentation dafür versteckt.

Greg Malcolm
quelle
1
Diese werden als Lebensdauern bezeichnet: static.rust-lang.org/doc/master/guide-lifetimes.html
Arjan
Der Link im vorherigen Kommentar funktioniert nicht mehr. Ich weiß nicht, ob dies gleichwertig ist: doc.rust-lang.org/book/lifetimes.html
Ellen Spertus
Ellens Link funktioniert ebenfalls nicht mehr - hier ist der neue (Stand Juni 2019): doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

Antworten:

67

Dies sind Rusts benannte Lebenszeiten.

Zitat aus der Programmiersprache Rust :

Jede Referenz in Rust hat eine Lebensdauer. Dies ist der Bereich, für den diese Referenz gültig ist. Die meisten Zeitlebensdauern sind implizit und abgeleitet, genau wie die meisten Zeittypen abgeleitet werden. Ähnlich wie wenn wir Typen mit Anmerkungen versehen müssen, weil mehrere Typen möglich sind, gibt es Fälle, in denen die Lebensdauer von Referenzen auf verschiedene Arten in Beziehung gesetzt werden kann. Daher muss Rust die Beziehungen mit generischen Lebensdauerparametern mit Anmerkungen versehen, damit sichergestellt wird, dass die Die zur Laufzeit verwendeten tatsächlichen Referenzen sind definitiv gültig.

Lebenslange Anmerkungen ändern nichts daran, wie lange eine der beteiligten Referenzen noch gültig ist. So wie Funktionen jeden Typ akzeptieren können, wenn die Signatur einen generischen Typparameter angibt, können Funktionen Referenzen mit beliebiger Lebensdauer akzeptieren, wenn die Signatur einen generischen Lebensdauerparameter angibt. Annotationen auf Lebenszeit beziehen sich auf die Lebensdauer mehrerer Verweise.

Lebenszeitanmerkungen haben eine etwas ungewöhnliche Syntax: Die Namen der Lebensdauerparameter müssen mit einem Apostroph beginnen '. Die Namen der Lebensdauerparameter sind normalerweise alle in Kleinbuchstaben und wie generische Typen sind ihre Namen normalerweise sehr kurz. 'aist der Name, den die meisten Leute standardmäßig verwenden. Annotationen von Lifetime-Parametern folgen auf die &einer Referenz, und ein Leerzeichen trennt die Annotation der Lifetime vom Typ der Referenz.

Anders ausgedrückt, eine Lebensdauer entspricht in etwa der Ausführungsspanne, in der die Daten, auf die eine Referenz verweist, gültig sind. Der Rust-Compiler wird konservativ auf die kürzest mögliche Lebensdauer schließen, um sicher zu sein. Wenn Sie dem Compiler mitteilen möchten, dass eine Referenz länger als die kürzeste Schätzung lebt, können Sie sie benennen und sagen, dass die Ausgabereferenz beispielsweise dieselbe Lebensdauer wie eine bestimmte Eingabereferenz hat.

Die 'staticLebensdauer ist eine besondere Lebensdauer, die am längsten gelebte aller Lebenszeiten - für die Dauer des Programms. Ein typisches Beispiel sind Zeichenfolgenliterale, die während der Lebensdauer des Programms / Moduls immer verfügbar sind.

Weitere Informationen erhalten Sie von diesem Foliendeck , beginnend mit Folie 29.

Die Lebensdauern in Rust behandeln auch die Lebensdauern in einiger Tiefe.

quux00
quelle