ISBN 9784873119786
プログラミングRust 第2版
- 出版社
- オライリー・ジャパン
- 刊行
- 2022-01
概要
RustのOwnershipとメモリモデルを原理から実践まで網羅する
想定読者
C/C++ や他のシステム言語の経験があり、メモリ安全なシステムプログラミングをRustで習得したいエンジニア
こんな人には向いていない
- プログラミング自体が初めての人。ポインタやメモリ管理の概念を前提として書かれており、プログラミング入門書としては使いにくい
- Rustの文法を手早くスキャンしたいだけの人。本書はほとんどの機能を詳細にカバーする設計であり、リファレンス的な拾い読みには向いているが通読には相応の時間を要する
- Webアプリケーションの高水準フレームワーク利用だけが目的の人。本書の重点はシステム層の原理的な理解にあり、フレームワーク固有のハウツーは別途必要になる
この本で身につくこと
- 所有権・借用・ライフタイムの三原則をコンパイラの視点から説明できる
- トレイトと多態性を活用して汎用ライブラリを設計できる
- async/await と Future を使った非同期処理の実装パターンを理解できる
- スレッド安全性をコンパイル時に保証するRustの並行モデルを実装に適用できる
- Result/Option/? 演算子によるエラーハンドリングを実務コードで一貫して使える
- unsafe ブロックの意味・使用条件・リスクを原理から説明できる
ハイライト(外部からの言及)
C/C++並みのパフォーマンスと低レベルの制御能力に加え、メモリとスレッドの安全性を担保し、さらに並行性にも優れるといった特徴を持つ、優れた言語です — 出典
Rustが他のシステム言語と一線を画す三つの価値軸(性能・安全・並行)が端的に示されており、本書を手に取る動機と直結する
Mozillaで実際にRustを使ってFirefoxを開発している著者による、言語の概要と、用途について書かれた書籍で、Rustのほとんどの機能を詳細にカバーします — 出典
著者がプロダクション規模の実装者であることが、網羅的な解説の信頼性を裏付けている
章立て
第1章 システムプログラマにもっといいものを
Rust の問題意識(C/C++ のメモリ安全性問題)からの出発点
第2章 Rustツアー
本書全体のサンプリング。最初に読むと残り章の地図ができる
第3章 基本的な型
整数ビット幅・文字型・タプルなど Rust 固有の型体系を確認する章。所有権を学ぶ前の土台であり、他言語経験者は必要な型が登場したときに辞書的に参照するのが効率的
第4章 所有権と移動
Rust の中核概念。本書最重要章の 1 つ
第5章 参照
借用とライフタイムの理論。所有権と組み合わせて読む
第6章 式
if やブロックが値を返す Rust の式中心設計を解説する章。クロージャ・イテレータ章の理解に直結するため、後の章で詰まりを感じた際に本章に立ち返ると接続が改善する基礎
第7章 エラー処理
Result / Option パターンと ? 演算子。Java / Go との対比
第8章 クレートとモジュール
Cargo / クレート公開 / セマンティックバージョニング
第9章 構造体
impl・関連関数・メソッドの定義を扱う章。実務コードのほぼ全体に現れる基礎構文であり、OOP 経験者は継承なし・コンポジション中心という本書との差異を意識しながら読むと定着が早い
第10章 列挙型とパターン
代数的データ型(ADT)としての enum。関数型言語の影響
第11章 トレイトとジェネリクス
Rust の汎化の中核。dyn / impl Trait の使い分け
第12章 演算子オーバーロード
std::ops トレイトで + / * 等をオーバーロードするパターンを解説。実務での使用頻度は限られるが、標準ライブラリの Add / Mul 実装を読む際の前提知識になるため初読では軽く流してよい章
第13章 ユーティリティトレイト
Drop / Deref / From / Into の Idiom
第14章 クロージャ
Fn / FnMut / FnOnce の使い分け。所有権と関連付けて読む
第15章 イテレータ
ゼロコスト抽象の代表例。実装パフォーマンスを失わない関数型スタイル
第16章 コレクション
Vec / HashMap / BTreeMap など標準コレクションを網羅する章。実務コードで最も参照頻度が高い部類に入り、イテレータ章と組み合わせて読むとパターンが定着しやすく学習進捗の指標にもなる
第17章 文字列とテキスト
&str と String の関係。Unicode の正しい扱い
第18章 入出力
ファイル読み書き・標準入出力・BufReader など I/O 抽象を扱う章。エラー処理章とクロージャ章の知識を前提とするため、それらを習得した後に読む順序が自然で吸収効率が高い
第19章 並列性
Send / Sync / Mutex / Rayon。Rust の並列性の基礎
第20章 非同期プログラミング
Future / async-await / Tokio。実務 Rust の新しい主戦場
第21章 マクロ
宣言的マクロ / 手続き的マクロ。Rust メタプログラミング
第22章 unsafeなコード
Rust の安全性保証から外れる領域。FFI や低レベル最適化
第23章 外部言語関数
C/C++ との FFI。本書の終着点
学習のヒント
- 所有権の章はRust特有の最大の難所であり、後続のすべての章の土台になる。理解が詰まった場合は先へ進まず、小さなコードを手元でコンパイルしながら反復するのが効果的
- 第2版で新設された非同期処理の章は、async/awaitの文法よりもFutureの実行モデル(Pollの仕組み)を先に把握すると章全体の接続が改善する。TokioやAsync-stdの公式ドキュメントと並行参照を推奨する
- トレイトとジェネリクスの章を早めに読んでおくと、標準ライブラリのAPIドキュメントが読み解きやすくなる。辞書的な使い方をする場合はここを基点にするとよい
- unsafeの章は初回通読では流し読みで構わない。FFIを書くか低レベルデータ構造を自前実装する段階で戻ると内容が腑に落ちやすい
前提知識
- ポインタ・スタック・ヒープなどメモリの基本概念の理解(CまたはC++で入門レベルのコードを書いた経験があると理想的)
- コンパイル型言語での型システムの基礎的な扱い(型推論・ジェネリクスの概念を他言語で触れていると吸収が早い)
- コマンドラインでのビルドツール操作の経験(Cargoの使い方は本書で解説されるが、makeやnpm等を使ったことがある前提だとスムーズ)
次に読む本
Rust for Rustaceans
本書がユーザー視点で所有権・借用・トレイトを解説するのに対し、Rust for Rustaceans はコンパイラや非同期ランタイムの内部実装レベルで同一概念を再解説する。本書を通読した後に読むことで、Pin・Unpin・非同期 Executor の設計判断が連続した文脈で理解できる順序になっている
The Rust Programming Language(公式Book、無料Web版)
本書は機能を網羅的に解説するため概念の圧密度が高い箇所がある。公式 Book は同一概念を異なる例と順序で解説しており、本書の特定章で詰まった箇所のピンポイント補完に向く。無料 Web 版で常に最新仕様に追従している点も本書との差分
Rustonomicon(公式、無料Web版)
本書の第 22 章(unsafe なコード)は unsafe の概要と主要ユースケースを扱うが、未定義動作の体系的なカタログや生ポインタ演算の境界条件は Rustonomicon が一次資料となる。FFI 実装や低レベルデータ構造を書く段階で本書の unsafe 知識を前提に参照すると吸収が速い
出版社による内容紹介
安全性、高速性、並行性に優れた言語Rustの決定版の改訂! 次世代ブラウザ開発用にMozillaによって開発されたRustは、C/C++並みのパフォーマンスと低レベルの制御能力に加え、メモリとスレッドの安全性を担保し、さらに並行性にも優れるといった特徴を持つ、優れた言語です。本書はMozillaで実際にRustを使ってFirefoxを開発している著者による、言語の概要と、用途について書かれた書籍で、Rustのほとんどの機能を詳細にカバーします。Rustのメジャーバージョンアップにより非同期処理が可能となったことに対応し、第2版では新たに非同期の章を設け、この機能を詳細に解説しています。
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。