web-dev-qa-db-ja.com

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

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

'static
'r
'a

そのアポストロフィの意味は何ですか?多分それは参照(&)?参照に固有の一般的なタイピング?このドキュメントがどこに隠れているのか、私にはわかりません。

78
Greg Malcolm

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

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

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

ライフタイムアノテーションは、関連する参照がどれだけ長く存続するかを変更しません。シグネチャがジェネリック型パラメータを指定するときに関数が任意の型を受け入れることができるのと同じように、シグネチャがジェネリック寿命パラメータを指定するとき、関数は任意のライフタイムの参照を受け入れることができます。ライフタイムアノテーションが行うことは、複数の参照のライフタイムを互いに関連付けることです。

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

別の言い方をすると、存続期間は、参照が指すデータが有効である実行期間の近似値です。 Rustコンパイラは、安全のために可能な限り最短のライフタイムを控えめに推測します。参照が最短の見積もりよりも長く存続することをコンパイラに伝えたい場合は、出力リファレンスがたとえば、指定された入力参照と同じ寿命を持っています。

'staticライフタイムは特別なライフタイムであり、プログラムの期間中、すべてのライフタイムの中で最も長いライフタイムです。典型的な例は、プログラム/モジュールの存続期間中常に利用できる文字列「リテラル」です。

詳細については、スライド29から このスライドデッキ を参照してください。

Rust in Rust では、寿命についても詳しく説明しています。

46
quux00