関係書目ライフタイムこのガイドはRustの所有権システムの3つの解説の3つ目です。これはRustの最も独特で注目されている機能です。Rust開発者はそれについて高度に精通しておくべきです。所有権こそはRustがその最大の目標、メモリ安全性を得るための方法です。そこにはいくつかの別個の概念があり、各概念が独自の章を持ちます。いる、ライフタイムそれらの3つの章は関連していて、それらは順番に並んでいます。所有権システムを完全に理解するためには、3つ全てを必要とするでしょう。詳細に入る前に、所有権システムについての2つの重要な注意があります。Rustは安全性とスピードに焦点を合わせます。Rustはそれらの目標を、様々な「ゼロコスト抽象化」を通じて成し遂げます。それは、Rustでは抽象化を機能させるためのコストをできる限り小さくすることを意味します。所有権システムはゼロコスト抽象化の主な例です。コンパイル時に行われます。それらのどの機能に対しても実行時のコストは全く掛かりません。このシステムはあるコストを持ちます。多くのRust入門者は、私たちが「借用チェッカとの戦い」と呼ぶものを経験します。そこではRustコンパイラが、開発者が正しいと考えるプログラムをコンパイルすることを拒絶します。所有権がどのように機能するのかについてのプログラマのメンタルモデルがRustの実装する実際のルールにマッチしないため、これはしばしば起きます。よいニュースがあります。経験豊富なRustの開発者は次のことを報告します。それは、所有権システムのルールと共にしばらく仕事をすれば、借用チェッカと戦うことは次第に少なくなっていく、というものです。それを念頭に置いて、ライフタイムについて学びましょう。ライフタイム他の誰かの所有するリソースへの参照の貸付けは複雑になることがあります。次のような一連の作業を想像しましょう。あなたの参照は無効なリソースを指しています。リソースがメモリであるとき、これはダングリングポインタまたは「解放後の使用」と呼ばれます。これを修正するためには、ステップ3の後にステップ4が絶対に起こらないようにしなければなりません。Rustでの所有権システムはこれをライフタイムと呼ばれる概念を通じて行います。それは参照の有効なスコープを記述するものです。引数として参照を受け取る関数について、参照のライフタイムを黙示または明示できます。{}'aは「ライフタイムa」と読みます。技術的には参照は全てそれに関連するライフタイムを持ちますが、一般的な場合にはコンパイラがそれらを省略してもよいように計らってくれます(つまり、「省略」できるということです。それに入る前に、明示の例を分解しましょう。ついては前に少し話しました。ついては議論しませんでした。間に「ジェネリックパラメータ」を持つことができ、ライフタイムはその一種です。議論しますが、とりあえず、ライフタイムの面に焦点を合わせましょう。ライフタイムを宣言するために使われます。持つことを意味します。2つの参照引数があれば、それは次のような感じになるでしょう。'b>(...)そして引数リストでは、名付けたライフタイムを使います。参照が欲しいのならば、次のようにします。比較するならば、それらは同じです。間にこっそり入っているだけです。ミュータブルな参照」のように読みます。使うときにも、明示的なライフタイムを必要とするでしょう。ライフタイムを持てます。これは関数と同じ方法です。{このようにライフタイムを宣言します。i32,そしてそれを使います。それではなぜここでライフタイムを必要とするのでしょうか。参照より長い間有効にはならないことを保証する必要があるからです。次のようなメソッドを実装しましょう。行で宣言する必要があります。