ISBN 9784798160221
詳解Rustプログラミング
概要
CUIアプリ実装を通じてRustでシステムプログラミングを体系的に習得する
想定読者
他言語での開発経験があり、Rustでメモリ管理・低レイヤー・OSとの境界を実装レベルで理解したいエンジニア。新規サービスにRustを採用することになり、言語設計の背景から学びたい実務者。
こんな人には向いていない
- プログラミング自体を初めて学ぶ入門者——所有権・ライフタイム・システムコールを扱う構成であり、他言語経験なしには難易度が高い
- Rustの文法を網羅的に習得したい読者——本書はシステムプログラミングの実例を通じた学習方式で、構文の全体的なリファレンスは別書(プログラミングRust等)が必要
- WebフロントエンドやWasmへのRust適用を主目的とする読者——本書の重点はOSレイヤー・カーネル・ネットワーク低レイヤーに置かれており、Web周辺APIは扱われない
読了後にできるようになること
- Rustの所有権・借用・ライフタイムの仕組みを、コンパイラが安全性をどのように保証するかという視点から説明できる
- ファイルI/O・キーバリューDB・生TCPソケットを使ったネットワーク通信を実装し、メモリとI/Oの相互作用を理解できる
- プロセス・スレッドの生成と管理、コンテナとの関係をRustのコードを通じて把握できる
- 割り込み・シグナル・例外処理などカーネルとアプリケーションの境界を制御するテクニックを実装できる
- Rustのメモリモデル(スタック・ヒープ・rawポインタ)を実際の数値で追跡し、unsafeな操作の意味と責任範囲を理解できる
- コンピュータサイエンスの基礎(時間管理・システムコール・低レイヤーのデータ表現)をRustの実装と対応付けて説明できる
本書のキー概念(章解説)
- 第 1 章 はじめに — 本書全体の構成と学習方針を把握する導入章。Rustの設計思想とシステムプログラミングへの接続を概観できる
- 第 2 章 言語の基礎 — Rust固有の型システム・パターンマッチ・エラー処理の基礎。他言語経験者が最初にぶつかる差異を整理するための章
- 第 3 章 複合データ型 — 構造体・列挙型・トレイトを組み合わせたデータモデリング。Rustらしい設計パターンの基礎がここに集約されている
- 第 4 章 ライフタイムと所有権と借用 — 本書の難所かつ核心。Rustの最大の独自性であるメモリ安全性の仕組みを扱う。コンパイラエラーと向き合いながら手を動かして読むと定着が早い
- 第 5 章 データの詳細 — 整数・浮動小数点・文字列のビット表現を深掘りするシステムプログラミング編の導入。数値型の選択がパフォーマンスに与える影響を体感できる
- 第 6 章 メモリ — スタック・ヒープ・rawポインタ・unsafeコードを扱う中核章。Rustのメモリモデルを最も深く掘り下げる箇所で、第4章と合わせて2度読む価値がある
- 第 7 章 ファイルとストレージ — ファイルI/OとキーバリューDBの実装を通じて、読み書きのバッファリングとシリアライゼーションの実際を学ぶ
- 第 8 章 ネットワーク — 生のTCPソケットを使ったネットワークプログラム。高レベルHTTPクライアントではなく、バイトストリームレベルで通信を制御するプロセスを体験できる
- 第 9 章 時間とタイムキーピング — OS時計・単調時計・タイムゾーンの扱いをRustで実装する。分散システム設計者が時刻の信頼性を議論する際の基礎になる知識を扱う
- 第 10 章 プロセスとスレッドとコンテナ — プロセス生成・スレッド間通信・コンテナ(namespace/cgroup)の基礎をRustから触れる。コンテナ技術の低レイヤーを理解したい読者にとって価値が高い章
- 第 11 章 カーネル — OSカーネルとのインターフェースを直接扱う章。システムコールの呼び出しとカーネルの応答をRustから観察できる本書最深部
- 第 12 章 シグナルと割り込みと例外 — プロセスへのシグナル送受信・CPU例外・ソフトウェア割り込みを扱う最終章。OSとアプリケーションの境界を制御する知識が集約されている
ハイライト
- ダイレクトにメモリを操作し、OSのシステムコールを活用することで高速性を維持しつつ、コンパイラの進化によって安全性も確保した開発言語・Rust。(本書が扱うRustの本質——パフォーマンスと安全性の両立という設計思想が一文で示されており、どういう問題を解きたい読者向けかが明確になる)
- ファイルI/Oを使った入出力プログラムから、キーバリュー型のDB操作やメモリ操作、生のTCPを使うネットワークプログラム。そしてプロセスやスレッド、割り込みや例外処理などの低レイヤーからカーネルそのものまで扱うためのノウハウ(本書の扱う領域の広さを示す箇所。システムプログラミングのほぼ全域をカバーしており、Rustで低レイヤーを学ぶ際のロードマップとして参照できる範囲が分かる)
外部からの言及
- 低レイヤー・システムプログラミングを体系的に学ぶためのカリキュラム記事で、Rustによるシステムプログラミング書の枠に本書が位置づけられている。同セクションに『ゼロから学ぶRust』も並ぶが、本書はManning原著の翻訳であることが識別子として明示されている(qiita)
- 実務でRustを新規採用した開発者が学習書として使用したことを明記しており、Rust入門期に手を伸ばす実践書として機能していることが分かる。同時に読まれた『実践Rustプログラミング入門』と並んで挙げられており、両輪で学ぶ読み方が示唆されている(qiita)
編集メモ
Qiita言及4件 / 累計likes 1089。うち1件(likes 1069)はRust・低レイヤー学習のカリキュラム記事でシステムプログラミング書として明示的に推薦。実務でのRust採用時に読んだ書として挙げる実践者の記録も確認。essential基準(10件以上 / 200likes以上の本書専用言及)には届かないが、Rustシステムプログラミング学習経路での安定した存在感を持つ
読む前に押さえておきたいこと
- C言語またはC++など、ポインタやメモリ管理の概念に触れたことがある経験(完全な習熟は不要だが、スタック・ヒープという用語に馴染みがあると第4・6章の理解が大幅に速くなる)
- LinuxまたはmacOSのコマンドライン操作とファイルシステムの基礎知識
- TCP/IPの概念(IPアドレス・ポート番号・ソケットが何かを知っている程度)——第8章(ネットワーク)の前提として必要
- cargoコマンドの基本操作(cargo new / cargo build / cargo run)——公式インストールガイドで15分程度で習得できる
学習のコツ
- 第4章(ライフタイム・所有権・借用)はRustの最大の難所であり、コンパイラエラーを意図的に起こしながら読むと、エラーメッセージの意味が体で分かるようになる。通読を急がず、この章で手を止める時間を確保する価値がある
- 第2部(第5章〜)のシステムプログラミング編は、章ごとに独立した実装テーマを持つため、興味のある章から先に読むことができる。第6章(メモリ)と第8章(ネットワーク)は特に実務との接点が多い
- Rust構文の網羅的な理解は本書の目的ではないため、文法の詳細で詰まった場合は『プログラミングRust』や公式The Bookを参照する前提で読み進めるとよい
- 本書はCUIアプリケーションを実装しながら学ぶ構成なので、コードを手元で動かすことが前提。Rustのインストールとcargo環境を先に整えてから読み始めることを推奨する
出版社による内容紹介
さまざまなCUIアプリケーションを通して システム言語としてのRustを徹底詳解 本書は、 Tim McNamara, "Rust in Action: Systems programming concepts and techniques" Manning Publications, の翻訳書です。 【本書の内容】 ダイレクトにメモリを操作し、OSのシステムコールを活用することで高速性を維持しつつ、コンパイラの進化によって安全性も確保した開発言語・Rust。 本書は、ファイルI/Oを使った入出力プログラムから、キーバリュー型のDB操作やメモリ操作、生のTCPを使うネットワークプログラム。そしてプロセスやスレッド、割り込みや例外処理などの低レイヤからカーネルそのものまで扱うためのノウハウを、Rust固有のテクニカルタームとともに解説します。 著者のTim McNamaraは、15年以上の時間をかけて、テキストマイニング、自然言語処理、データ工学のエキスパートになりました。彼はRust Wellingtonのオーガナイザであり、Rustプログラミングのチュートリアルを、オフラインでも、TwitchとYouTubeを介したオンラインでも、定期的に開催しています。 【本書で取り上げるジャンル】 ・メモリ操作 ・ファイルとストレージ ・ネットワーク ・時間管理 ・プロセスとスレッド ・カーネル ・割り込みと例外処理 【読者が得られること】 ・Rustによるプログラミング基礎 ・Rust固有のプログラミング手法 ・システムプログラミングの勘所 ・コンピュータサイエンスの知識 目次 第 1章:はじめに 第 1部:Rust言語の独自機能 第 2章:言語の基礎 第 3章:複合データ型 第 4章:ライフタイムと所有権と借用 第 2部:システムプログラミングの謎を解き明かす 第 5章:データの詳細 第 6章:メモリ 第 7章:ファイルとストレージ 第 8章:ネットワーク 第 9章:時間とタイムキーピング 第10章:プロセスとスレッドとコンテナ 第11章:カーネル 第12章:シグナルと割り込みと例外
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。