標準ライブラリ
チェックポイント
- `Box<T>` Essential `Box<T>` はもっともシンプルな所有ポインタだ:`T` をヒープ上に保持し、`Box` 自体がドロップされるとそのヒープメモリを解放する。`Box::new` がどのようにアロケートするか、`Box<T>` が再帰的な型(`enum List { Cons(i32, Box<List>) }`)を表現可能にする理由、そして Rust における RAII スタイルのメモリ管理の基礎的な例として理解する。
- `Option<T>` Essential `Option<T>` は「`T` があるか、何もないか」を表す標準の直和型だ:`Some(T)` は値を持ち、`None` は何も持たない。Rust に `null` がない理由と代わりに型システムで不在を表現する方法、`match`・`if let`・`?` 演算子が `Option` を使いやすくする仕組み、そして便利なヘルパー(`unwrap_or`、`map`、`and_then`)を学ぶ。
- 範囲型 Essential Rust の範囲(range)式 `a..b`、`a..=b`、`..b`、`a..`、`..` は `std::ops` の `Range*` ファミリーの型の値を生成する。各範囲型が何を含むか、なぜ `Iterator` を実装するか(`for` ループで使える理由)、そして `&v[i..j]` の背後にあるスライシング引数としてどのように機能するかを学ぶ。
- `Result<T, E>` Essential `Result<T, E>` は「成功した `T` かエラー `E` か」を表す標準の直和型だ:`Ok(T)` または `Err(E)`。Rust が回復可能なエラーを例外ではなく値として扱う理由、`?` 演算子が `Result` を返す呼び出しをすっきりした線形コードに変える仕組み、そして `Result` と `Option` の相互運用を学ぶ。
- `Vec<T>` Essential `Vec<T>` は Rust の伸長可能なヒープアロケートされた配列だ:連続したバッファと長さおよびキャパシティを持つ。`push`・`pop`・インデックスアクセスの仕組み、キャパシティを超えたときのバッファ成長の仕組み、`&v[..]` がスライスビューを与える理由、そしてスコープを抜けると `Vec` がメモリを自動解放する仕組みを学ぶ。