型
サブカテゴリ
チェックポイント
- 代数的データ型 Essential 代数的データ型(ADT)とは何か、値を組み合わせる(AND)か選択肢を選ぶ(OR)かという2つの構成要素がすべてのデータモデルの基礎となる理由、そしてRustの `struct` と `enum` が合わさってADTで表現できるすべてをカバーする理由。
- 型のアライメント Essential 型の*アライメント*(alignment)とは、その値が始まらなければならないアドレス境界であり、`std::mem::align_of` で照会できる。ハードウェアがアライメントを要求する理由、コンパイラが各フィールドのアライメントを満たすためにどのように構造体フィールド間にパディングを挿入するか、フィールドの並べ替えで構造体を縮小できる理由、そしてデフォルトレイアウトを変更する `#[repr(C)]` と `#[repr(packed)]` 属性を学ぶ。
- Rustのプリミティブ型 Essential Rustの組み込みプリミティブ型 — 固定幅整数(`i8`…`i128`、`u8`…`u128`、`isize`、`usize`)、浮動小数点数(`f32`、`f64`)、`bool`、`char`、そしてユニット型 `()` — と、既知のZigプリミティブへの対応関係。
- Rustにおける型とは何か Essential Rustの型システムへの導入:型がコンパイラに何を伝えるか、なぜすべての値はコンパイル時に既知の型をちょうど1つ持つのか、プリミティブ型とユーザー定義型の違い、そしてZigの緩い型規律や動的言語のランタイム型とどう異なるか。
- ジェネリックな帰納的定義 Essential 帰納的型を別の型でパラメータ化する方法 — `enum Option<T>`、`enum List<T>`、`struct Pair<A, B>`。`<T>` という型パラメータの構文、ジェネリックな定義がコンパイルは一度だけでもインスタンス化ごとに異なる具体型を生成する理由、そしてこれが型に適用した多相的関数と同じアイデアである点を学ぶ。
- 帰納的型 Essential 帰納的型(inductive type)とは、有限個のコンストラクタのリストによって定義される型だ。各コンストラクタは引数の既知のリストを受け取る。直積型と直和型が最小の例であり、このチェックポイントでは一般的なパターン、数学的帰納法との対応、そして帰納的型の値を構造的再帰で辿れる理由を紹介する。
- 反復的(再帰的)帰納型 Essential 反復的帰納型(iterated inductive type)とは、コンストラクタが型自身を参照できる型だ — 単方向連結リストや二分木のような古典的な再帰定義がその例だ。Rustが再帰バリアントを間接参照(`Box<Self>` など)の背後に置くことを要求する理由と、それが再帰的定義の構造を正確に反映している点を学ぶ。
- 直積型 — 構造体とタプル Essential Rustの直積型:タプルと `struct` は複数の値を1つにまとめる。名前付きフィールドの構造体、タプル構造体、ユニット構造体、フィールドアクセスとデストラクチャリングの構文、そして直積型の値の数がそのフィールドの値の数の*積*である理由を解説する。
- 型としての参照 Essential Rustの参照型 `&T` と `&mut T` はZigの `*T` の直接的なアナログだ:別の値のアドレスを格納する値だ。このチェックポイントは参照を純粋に*型*として導入する — `&`/`&mut` による参照の生成、`*` による参照先の読み取り、そして生ポインタとの比較。参照が*有効*である時期を管理するコンパイル時のルール(借用チェッカー)は後で扱う。
- 同時的(相互再帰的)帰納型 Essential 二つ以上の帰納的型が互いの定義を参照するとき、それらは同時的(相互再帰的)帰納型だ。式と文、木と森といった古典的な例を通じて、Rustで再帰規則に引っかからずにそれらを宣言し走査する方法を学ぶ。
- 型のサイズ Essential 値を格納できるすべてのRust型はバイト単位の固定コンパイル時サイズを持ち、`std::mem::size_of` で照会できる。プリミティブ型のサイズがビット幅と一致する理由、構造体と列挙型のサイズの計算方法、そしてどの種類の型(スライス、トレイトオブジェクト)が意図的に静的に既知のサイズを持たないかを学ぶ。
- スライス Essential スライス `[T]` はコンパイル時に長さが不明な `T` 値の連続した並びであり、ほぼ常に *スライス参照* `&[T]` または `&mut [T]` — アドレスと長さの両方を保持するファットポインタ — を通じて扱う。スライスがどのように参照を汎化するか、`&str` が UTF-8 バイトのスライスにすぎない理由、そしてインデックスアクセスとイテレーションの仕組みを学ぶ。
- 直和型 — 列挙型 Essential Rustの直和型:`enum` は*バリアント*の固定リストを宣言し、列挙型の値はそのうちの正確に1つだ。Cスタイルの列挙型、ペイロードを持つバリアントの列挙型、「複数の可能性のうちの1つ」を正確にモデル化する理由、そして値の数がバリアントの値の数の*和*である理由を解説する。