ライフタイム注釈とは?
らいふたいむちゅうしゃく
ライフタイム注釈とは、Rustプログラミング言語で参照の有効期間をコンパイラに明示するための構文です。
ライフタイム注釈(lifetime annotation)とは、Rustプログラミング言語が持つ独自の機能で、参照(リファレンス)が有効である期間(ライフタイム)をコンパイラに伝えるための構文です。'a(アポストロフィ+英字)の形式で記述します。
Rustは所有権(ownership)とボローチェッカー(borrow checker)によってメモリ安全性を保証していますが、関数や構造体が複数の参照を扱う場合、コンパイラは「どの参照がどの参照より長く生存しているか」を自力では判断できないことがあります。このような場合にライフタイム注釈で関係を明示します。
たとえば、2つの文字列スライスを受け取り、どちらか一方を返す関数では、返す参照のライフタイムが引数のどちらに依存するかをコンパイラに伝える必要があります。注釈を書くことで「入力と出力の参照が同じライフタイムを持つ」などの制約を表現します。
ライフタイム注釈は以下のような場面で求められます。
- 関数が参照を引数として受け取り、参照を返す場合
- 構造体のフィールドに参照を持つ場合
- 複数の参照引数の生存期間に依存関係がある場合
多くの場合はコンパイラの「ライフタイム省略規則」によって自動推論されますが、複雑な場合は明示が必要です。ライフタイム注釈はRust特有の概念であり、メモリ安全性をガベージコレクターなしで実現する核心的な仕組みです。
使い方・例文
Rustで関数シグネチャを書く際に「'a というライフタイム注釈を付けて、返り値の参照が引数と同じ生存期間を持つことを示す」のように使われます。Rustの学習文脈で「ライフタイムエラーが出たのでライフタイム注釈を追加した」という表現もよく見られます。
この用語をシェア
最終更新: