項目14:生存期間を理解しよう
https://effective-rust.com/lifetimes.html
LT;DR
Rust の参照値には、すべて 生存期間 が関連付けされている
生存期間には ライフタイム注釈 で名前を付けられる
生存期間省略ルール に沿っていれば、ライフタイム注釈は省略可能
参照 を含むデータ構造にも生存期間が関連付けられるため、生存期間の管理が煩雑にならないように 所有 を検討する のが良い
'static は、スコープ 外にならないことが保証されている値の参照に用いられる
e.g. グローバル定数 や明示的に リーク した ヒープ 上のデータ
ライフタイム注釈が同じであっても、生存期間が同じということはではない
ライフタイム注釈の目的は、アイテムへの参照がアイテム自身よりも長く存在しないことを保証すること
これを踏まえると、
入力と出力に同じライフタイム注釈を付与している場合、出力は入力よりも長く生存できないことを表す
pub fn first<'a>(data: &'a [Item]) -> Option<&'a Item>
2 つの入力に同じライフタイム注釈を付与している場合、出力は生存期間が短い方の入力よりも長く生存できない
pub fn find<'a>(haystack: &'a [u8], needle: &'a [u8]) -> Option<&'a [u8]>
どちらか一方の入力のみを参照している場合、戻り値のライフタイムがもう一方の生存期間を包含する必要はない
pub fn find<'a, 'b>(haystack: &'a [u8], needle: &'b [u8]) -> Option<&'a [u8]>
'_ は、同じライフタイム注釈を他で使う必要がない場合に用いられる
e.g. Debug の fmt メソッド
hr.icon
radish-miyazaki.icon あまりにも長くなったのでページ分割した
生存期間 のスコープ
生存期間の代数(ライフタイム注釈)
'static ライフタイム
生存期間とヒープ
データ構造の生存期間
無名の生存期間('_)
#Rust #Effective_Rust_―_Rustコードを改善し、エコシステムを最大限に活用するための35項目