1. ホーム
  2. rust

[解決済み] アポストロフィが1つ付いているラストタイプは何ですか?

2022-06-13 05:43:04

質問

Rustでは、アポストロフィ1つで表記される型がいくつもあります。

'static
'r
'a

このアポストロフィの意味は何なのでしょうか?もしかしたら、参照の修飾語かもしれません( & )? リファレンスに特化した汎用的な型付け?これのドキュメントがどこに隠れているのか見当もつきません。

どのように解決するのですか?

Rustの名前付きライフタイムです。

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

<ブロッククオート

Rustのすべての参照にはライフタイムがあり、その参照が有効であるスコープを表します。ほとんどの場合、型が推論されるのと同様に、ライフタイムは暗黙的に推論されます。複数の型が可能であるため型にアノテーションを付けなければならないのと同様に、参照の寿命はいくつかの異なる方法で関連付けられる場合があるため、Rust では、実行時に実際に使用される参照が確実に有効であることを確認できるように、一般的な寿命パラメータを使用して関係をアノテートする必要があります。

Lifetimeアノテーションは、関係する参照が生きている期間を変更するものではありません。 の寿命は変わりません。関数が任意の型を受け入れることができるのと同じ方法で が一般的な型パラメータを指定するとき、関数はどんな型でも受け入れることができます。 シグネチャが一般的なパラメータを指定している場合、関数はどのような寿命の参照でも受け入れることができます。 lifetimeパラメータを指定すると、関数は任意の有効期間を持つ参照を受け入れることができます。寿命アノテーションが行うのは、複数の参照の寿命を相互に関連付けることです。 複数の参照の有効期間を相互に関連付けることです。

ライフタイムアノテーションは少し変わった構文を持っています。 の名前はアポストロフィで始まらなければなりません。 ' . の名前は通常すべて小文字です。 の名前は通常すべて小文字で、ジェネリックタイプと同様です。 のように非常に短い名前になります。 'a という名前は、ほとんどの人が がデフォルトの名前です。Lifetimeパラメータのアノテーションは & の後に記述します。 の後に置かれ、スペースが寿命アノテーションと を区切ります。

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

'static の寿命は特別な寿命で、すべての寿命の中で最も長く、プログラムの存続期間中です。 典型的な例は、プログラム/モジュールの寿命の間、常に利用可能である文字列の "リテラル"です。

より多くの情報を得るには このスライドデッキ で、スライド29あたりからご覧いただけます。

Rustにおけるライフタイム でもライフタイムについて詳しく説明しています。