Rust
サブカテゴリ
チェックポイント
- 借用と所有権の取得 Essential ある値を使う関数を設計するとき、*借用する*(参照 `&T` や `&mut T` を取り、所有権を呼び出し元に残す)か、*取得する*(`T` を値渡しで受け取り、新たな所有者になる)かを選べる。そのトレードオフ——誰がライフタイムを気にするか、誰が `Drop` のコストを払うか、所有権を取得するのが正しい選択はいつか——を見ていき、Rust APIが従う慣例を学ぶ。
- Rustの関数 Essential `fn name(arg: T, …) -> Ret { … }` でRustの関数を宣言する方法を解説する。パラメータの型注釈は必須で、戻り値の型はデフォルトで `()` になり、本体の最後の式が戻り値となり、`return` は早期脱出のために予約されている。RustのZigとの構文の違い、そしてブロック式のセマンティクスが `let x = if cond { a } else { b };` を自然に書けるようにする仕組みも説明する。
- Rust言語入門 Essential Rustの紹介——なぜRustが存在するのか、所有権システムがどんな問題を解決するのか、そしてZigコースで学んだメモリの概念がRustのコンパイル時安全性保証にどう直結するかを解説する。
- 所有権 Essential 所有権はRustがRAIIを自動的に強制するためのコンパイル時のメカニズムだ。すべての値にはちょうど1人の所有者がいて、所有者がスコープを抜けると値はドロップされる。3つの所有権ルール、代入によって所有権が移譲される仕組み(その結果、元の変数はもう使えなくなる)、そして `Sized`・`Clone`・`Copy` トレイトがどの種類の値がこのように移譲され、どの種類が代わりに暗黙的に複製されるかを決定する理由を解説する。
- パターンマッチング Essential パターンマッチングはRustが代数的データを検査するための主要なツールだ。*パターン*は値の形状をテストしながら、同時にその一部を新しい名前にバインドする。`let`、関数パラメータ、`if let`、`while let` でのパターンの使い方、そして `match` を表現力豊かにする基盤としてのパターンを解説する。
- リソース獲得は初期化である(RAII) Essential RAIIはリソースのライフタイムを値のライフタイムに結びつけるデザインパターンだ——値が作られるときにリソースを獲得し、値が破棄されるときに解放する。「クリーンアップを忘れずに」という問題が「コンパイラに任せる」に変わる理由、`Box`・`Vec`・ファイルハンドルがすべて `Drop` を通じて同じパターンに従う仕組み、そしてRAIIがこれから学ぶ所有権ルールの正しいメンタルモデルである理由を解説する。
- Rustの変数 Essential `let` を使ったRustの変数宣言、`mut` の役割、バインディングがデフォルトでイミュータブルな理由、シャドウイング、そして省略した型注釈をRustの型推論がどう補うかを解説する。
- 可視性——`pub` とその仲間 Essential Rustはコードを*モジュール*に整理し、すべてのアイテム(関数、struct、フィールド、トレイト)はデフォルトで自身のモジュールにプライベートだ。可視性修飾子——`pub`、`pub(crate)`、`pub(super)`、`pub(in path)`——それぞれの意味、structフィールドがstructそのものとは独立した可視性を持つ理由、そしてプライバシー境界がモジュール境界にどう沿っているかを解説する。