Rustのlifetime
参考
良い
おさらい
lifetimeを理解するためには、前提として値のスコープを把握してないといけない
なぜか、「lifetime」と聞くと、真っ先に'aの型のやつが頭に浮かぶようになってしまっていたが、
それはlifetimeが扱う範囲の一部であることを思い出すと良い
昔に中途半端な理解をしたのが原因mrsekut.icon
こういう雑な階層構造がある
lifetime
値のlifetime
参照のlifetime
....
関数に関するもの
ここで'aとかが出てくる
もっかいよもう
整理する気合を出す前にバテた
あと今書いていたプログラムに特に必要がないということに途中で気づいてモチベがなくなった
2種類ある
値への参照が使用される期間
その値を使う最後の文の直後で終わる
dropが呼ばれたりはしない、何も起こらない
関数では、ライフタイム指定子を使って記述する
'aは「tick A」と発音するらしい
2種類ある
「型」のイメージ通り、指定された生存期間よりも、長い期間生存する参照しか受け付けない
つまり、型で表現されている生存期間は、必要とする生存期間の最短値になっているのかmrsekut.icon
開始してから終了するまでの期間を表している
関数周りのlifetimeについて
参照を返す関数の借用チェックは、関数の型の情報だけを見ている
関数のbodyは見てない
だから、関数ではerrorになるが、inline化するとerrorが消えるケースも存在する
関数内で参照できるobjectは5種類あり、関数が返す参照はそのうちの2つ
④静的オブジェクトの借用
⑤引数の借用
借用チェッカは、関数の返す参照の内、どれが④でどれが⑤なのかを判断できないといけない
解説の仕方がきれいに整備されていて納得感があるmrsekut.icon
なんで関数にlifetimeの指定が必要なのか、の意味がわかりやすい
例
code:rs
fn f<'a>(p: &'a i32) { ... }
関数fの生存期間より短い生存期間であるi32型への参照のみを引数に取ることができる
例
code:rs
fn f(p: &'static i32) { ... }
生存期間が'staticと同じ期間あるi32への参照のみを引数に取ることができる
参考