単一のアポストロフィで示されるRustタイプは何ですか?


89

Rustで、単一のアポストロフィで示されるいくつかのタイプに遭遇しました。

'static
'r
'a

そのアポストロフィの重要性は何ですか?多分それは参照の修飾子です(&)?参照に固有のジェネリックタイピング?このためのドキュメントがどこに隠れているのかわかりません。


1
これらはライフタイムと呼ばれます:static.rust-lang.org/doc/master/guide-lifetimes.html
Arjan

前のコメントのリンクは機能しなくなりました。これが同等かどうかはわかりません:doc.rust-lang.org/book/lifetimes.html
Ellen Spertus 2017

エレンのリンクも機能しなくなりました-これが新しいリンクです(2019年6月現在):doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

回答:


71

これらはRustの名前付きライフタイムです。

Rustプログラミング言語から引用:

Rustのすべての参照には有効期間があり、それがその参照が有効な範囲です。ほとんどの時間タイプが推測されるのと同じように、ほとんどの時間ライフタイムは暗黙的で推測されます。複数の型が可能であるために型に注釈を付ける必要がある場合と同様に、参照の有効期間がいくつかの異なる方法で関連付けられる場合があるため、Rustでは、一般的な有効期間パラメーターを使用して関係に注釈を付ける必要があります。実行時に使用される実際の参照は間違いなく有効です。

存続期間の注釈は、関連する参照の存続期間を変更しません。シグニチャがジェネリック型パラメータを指定する場合に関数が任意の型を受け入れることができるのと同じように、シグニチャがジェネリックライフタイムパラメータを指定する場合、関数は任意のライフタイムを持つ参照を受け入れることができます。ライフタイムアノテーションが行うことは、複数の参照のライフタイムを相互に関連付けることです。

ライフタイムアノテーションの構文は少し変わっています。ライフタイムパラメータの名前はアポストロフィで始まる必要があります'。ライフタイムパラメータの名前は通常すべて小文字であり、ジェネリック型と同様に、それらの名前は通常非常に短いです。'aほとんどの人がデフォルトとして使用する名前です。ライフタイムパラメータアノテーション&は参照の後に続き、スペースはライフタイムアノテーションをリファレンスのタイプから分離します。

別の言い方をすれば、ライフタイムは、参照が指すデータが有効である実行期間に近似します。Rustコンパイラは、安全であるために可能な限り最短の寿命を保守的に推測します。参照の存続期間が最短の見積もりよりも長いことをコンパイラーに通知する場合は、たとえば、出力参照の存続期間が特定の入力参照と同じであることを示す名前を付けることができます。

'staticプログラムの期間-寿命は特別な生涯、すべての寿命の住んでいた最長です。典型的な例は、プログラム/モジュールの存続期間中常に利用可能な文字列「リテラル」です。

スライド29から始めて、このスライドデッキから詳細情報を入手できます。

Rustのライフタイムでは、ライフタイムについてもある程度詳しく説明しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.