Rustのlifetime
参考
良い
おさらい
lifetimeを理解するためには、前提として値のスコープを把握してないといけない
なぜか、「lifetime」と聞くと、真っ先に 'a
の型のやつが頭に浮かぶようになってしまっていたが、
それはlifetimeが扱う範囲の一部であることを思い出すと良い
昔に中途半端な理解をしたのが原因

こういう雑な階層構造がある
lifetime
値のlifetime
参照のlifetime
....
関数に関するもの
ここで 'a
とかが出てくる
もっかいよもう
整理する気合を出す前にバテた
あと今書いていたプログラムに特に必要がないということに途中で気づいてモチベがなくなった
2種類ある
値への参照が使用される期間
その値を使う最後の文の直後で終わる
dropが呼ばれたりはしない、何も起こらない
関数では、ライフタイム指定子を使って記述する
'a
は「tick A」と発音するらしい
2種類ある
「型」のイメージ通り、指定された生存期間よりも、長い期間生存する参照しか受け付けない
つまり、型で表現されている生存期間は、必要とする生存期間の最短値になっているのか

開始してから終了するまでの期間を表している
関数周りのlifetimeについて
参照を返す関数の借用チェックは、関数の型の情報だけを見ている
関数のbodyは見てない
だから、関数ではerrorになるが、inline化するとerrorが消えるケースも存在する
関数内で参照できるobjectは5種類あり、関数が返す参照はそのうちの2つ
④静的オブジェクトの借用
⑤引数の借用
借用チェッカは、関数の返す参照の内、どれが④でどれが⑤なのかを判断できないといけない
解説の仕方がきれいに整備されていて納得感がある

なんで関数にlifetimeの指定が必要なのか、の意味がわかりやすい
例
rsfn f<'a>(p: &'a i32) { ... }
関数 f
の生存期間より短い生存期間であるi32型への参照のみを引数に取ることができる
例
rsfn f(p: &'static i32) { ... }
生存期間が 'static
と同じ期間あるi32への参照のみを引数に取ることができる
参考