TL;DR
- Rust の参照にはすべて生存期間が結び付いており、ライフタイム注釈で名前を付けられる。生存期間省略ルールに当てはまれば、注釈は省略できる。
- 参照を含むデータ構造にも生存期間が付くので、生存期間の管理が煩雑にならないよう、参照ではなく値を所有する形を検討する。
内容
要点
'static は、スコープから外れないことが保証された値への参照に使う。たとえばグローバルな定数や、明示的にリークさせたヒープ上のデータである。
ライフタイム注釈が同じでも、生存期間が同じとは限らない。ライフタイム注釈の目的は、アイテムへの参照がそのアイテムより長く存在しないことを保証することである。これを踏まえると、次のように読める。
- 入力と出力に同じ注釈を付けると、出力は入力より長く生存できない
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]>'_ は、同じ注釈を他の場所で使う必要がないときに使う。たとえば Debug トレイトの fmt メソッドである。
節ごとのページ
この項目は長いので、節ごとにページを分けた。