#Rust
22 件の記事
Rust 実践講座 #1 プロジェクト設計と clap — サブコマンド CLI の骨組みを立てる
基礎講座で学んだ文法で実際のツールを作る実践 8 回を始めます。作るのはアクセスログ分析 CLI の loglens です。なぜ CLI ツールが Rust の代表的な舞台なのか(単一バイナリ、起動速度)、clap の derive 方式でサブコマンド(stats・top・errors)を列挙型 1 つで宣言する方法、自動生成される --help、そして全 8 回の設計地図まで扱います。
Rust 基礎講座 #9 ライフタイムとモジュール — 注釈が必要になる瞬間、クレートで仕上げる
基礎講座の最終回です。第 4 回のダングリング参照の遮断がどう働いていたのかをライフタイム(lifetime)で説明します。missing lifetime specifier エラーが出る瞬間、ライフタイム注釈の本当の意味(寿命を延ばすのではなく関係を宣言する)、ほとんどの場合に表記が省略される理由。続いて mod と pub でコードを分けるモジュールシステム、crates.io の外部クレートの使い方、そして講座後の学習経路まで整理します。
Rust 基礎講座 #8 トレイトとジェネリクス — 継承がない言語で共通の動作を定義する
これまで先送りしてきた概念を回収する回です。共通の動作を定義するトレイト(trait)と既定実装、型を一般化するジェネリクスとトレイト境界、derive が自動生成する標準トレイト(Debug・Clone・Copy・PartialEq)、ジェネリクスがランタイムコストなしにコンパイルされる単相化、そして Box<dyn Error> の dyn が意味する動的ディスパッチまで扱います。
Rust 基礎講座 #7 コレクションとイテレータ — Vec・String・HashMap、for の代わりにチェーン
実務コードの本体である 3 つのコレクションを扱います。可変長リストの Vec とインデックスの代わりに get を使う理由、なぜ String はインデックスでアクセスできないのか(UTF-8 とバイト・文字の違い)、HashMap と entry API、そして for 文を map・filter・collect のチェーンに置き換えるイテレータスタイルと遅延評価まで扱います。
Rust 基礎講座 #6 エラー処理 — Result と ? 演算子、panic と unwrap の境界
例外(exception)のない Rust のエラー処理を扱います。失敗の可能性を戻り値の型に現す Result、match の入れ子を 1 文字に縮めてエラーを伝播する ? 演算子、main が Result を返す実用形、そして unwrap・expect・panic をいつ使ってよく、いつ使ってはいけないのかの判断基準まで扱います。
Rust 基礎講座 #5 構造体と列挙型 — match と Option、null がない言語の設計
データを構造化する 2 本の軸、構造体(struct)と列挙型(enum)を扱います。impl ブロックでメソッドを付ける方法、バリアントごとに異なるデータを持てる Rust 列挙型の表現力、すべてのケースを検査したかをコンパイラが強制する match、そして null の代わりに「値がないかもしれない」を型で表す Option まで、Rust コードの骨格になる道具を扱います。
Rust 基礎講座 #4 参照と借用 — & と &mut、借用規則のコンパイルエラーを解決する
所有権を移さずに値を使う参照(&)と可変参照(&mut)を扱います。「不変参照はいくつでも、可変参照は 1 つだけ」という借用規則が何を防ぐのか(反復中の変更、データ競合)、cannot borrow as mutable エラーの読み方と直し方、解放済みメモリを指すダングリング参照がコンパイル段階で遮断される構造、そして &str とスライスまで扱います。
Rust 基礎講座 #3 所有権 — move が既定の言語、GC なしでメモリが解放される仕組み
Rust の心臓である所有権を正面から扱います。すべての値に所有者が 1 つだけという 3 つの規則、代入と関数呼び出しで値が移動(move)した後に元の変数が使えなくなる理由、スタックに収まる固定サイズ型だけが持つ Copy、コストがコードに現れる clone、そしてスコープの終わりで自動的に解放される drop まで、use-after-free がコンパイルエラーに変わる構造を扱います。
Rust 基礎講座 #2 変数と型 — let と mut、シャドーイング、式で終わる関数
不変が既定の let と、明示的に付ける mut の意味から始めます。同じ名前を再宣言するシャドーイングがなぜ実務のイディオムなのか、整数・浮動小数点・bool・char のスカラー型とオーバーフローの挙動、タプルと配列、そしてセミコロン 1 つで文と式が分かれる Rust の関数の戻り値規則まで扱います。
Rust 基礎講座 #1 Rust とは — 学ぶ理由、rustup のインストールと cargo の最初の一歩
カーネルから CLI ツールまで Rust が急速に広がった理由である「GC なしのメモリ安全」が何を意味するのかから始めます。安全と性能がトレードオフだった既存言語との違い、rustup の 1 行インストール、cargo でプロジェクトを作って実行する基本サイクル、最初のコンパイルエラーメッセージの読み方、そして講座全体の地図まで扱います。