詳解 Rust プログラミング
ショウカイラストシプログラミング
- 著者:
- Tim McNamara / 吉川 邦夫(ティム マクナマラ / ヨシカワ クニオ)
- 出版社:
- 翔泳社
- 出版日:
- 2021年11月17日頃
- ISBN:
- 9784798160221
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
さまざまな 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 章: シグナルと割り込みと例外
技書の森解説
Rust を文法としてだけでなく、メモリやファイル、ネットワーク、カーネルといったシステムの仕組みを扱う道具として身につけたい人に向けた本が『詳解 Rust プログラミング』 (Tim McNamara 著、吉川 邦夫 訳、翔泳社、2021 年 11 月発売) です。原書は Manning Publications の Rust in Action: Systems programming concepts and techniques で、版元の紹介文は、さまざまな CUI アプリケーションを通してシステム言語としての Rust を詳しく解説する本と位置づけています。ファイル I/O を使った入出力プログラムから、キーバリュー型の DB 操作、メモリ操作、生の TCP を使うネットワークプログラム、さらにプロセスやスレッド、割り込みや例外処理、カーネルそのものまでを、Rust に固有の用語とともに扱う構成です。
2 部 12 章の構成、言語の独自機能からシグナルと割り込みまで
目次は、1 章「はじめに」に続く 2 部構成です。第 1 部「Rust 言語の独自機能」は 2 章の言語の基礎、3 章の複合データ型、4 章のライフタイムと所有権と借用の 3 章で、Rust で書くための土台を固めます。第 2 部「システムプログラミングの謎を解き明かす」は 5 章のデータの詳細、6 章のメモリ、7 章のファイルとストレージ、8 章のネットワーク、9 章の時間とタイムキーピング、10 章のプロセスとスレッドとコンテナ、11 章のカーネル、12 章のシグナルと割り込みと例外と続き、コンピューターの下の層へ順に降りていく並びです。版元は読者が得られることとして、Rust によるプログラミングの基礎、Rust に固有のプログラミング手法、システムプログラミングの勘所、コンピューターサイエンスの知識の 4 つを挙げています。
所有権と借用が GC なしでメモリ安全を支える仕組み
Rust の学習で多くの人が苦労するのは、4 章が扱う 所有権と借用の規則 とライフタイムです。C や C++ では、確保したメモリを誰がいつ解放するのかをプログラマーが管理し、解放後の領域への参照や二重解放がそのまま脆弱性につながります。Java や Go のような言語はガベージコレクションでこの問題を避けますが、実行時の負担と停止の予測しにくさを引き受けることになります。Rust は、値ごとに所有者を 1 つに定め、参照には借用の規則と有効期間を課し、それをコンパイル時に検査することで、実行時の回収の仕組みに頼らずにメモリの安全性を保証します。この規則は抽象的な説明だけでは腑に落ちにくく、データがメモリ上でどう表現されるのか、スタックとヒープのどこに置かれるのかを知って初めて、コンパイラーが何を守ろうとしているのかが見えてきます。本書が第 1 部で言語の規則を学んだあと、第 2 部の 5 章と 6 章でデータの表現と メモリ上の配置 を扱う順序をとっているのは、この往復を意図した構成と読めます。
低レイヤーの題材で学ぶ前提、他の言語での経験が近道
第 2 部の題材は、ファイルとストレージ、ネットワーク、時間、プロセスとスレッド、カーネル、割り込みと、OS や通信の仕組みそのものです。第 1 部で言語の基礎から入るため Rust を初めて書く人にも入口はありますが、他の言語でプログラムを書いた経験と、ポインター、OS のシステムコール、TCP/IP といった基本的な概念に触れたことがあると、各章の狙いを追いやすくなります。Rust の言語仕様を網羅的に確かめたい場合は、公式ドキュメントの The Rust Programming Language (通称 The Book) のような言語そのものを主題にした資料と組み合わせると、本書は「その知識を何に使うのか」を示す実践の側を受け持つ形になります。逆に、Web アプリケーションの開発やフレームワークの使い方を学びたい人には、本書の題材は目的から外れます。
C や C++ でシステム寄りの開発をしてきて Rust へ移りたい人、あるいは Python や JavaScript を書いてきた人がコンピューターの下の層を理解し直したいときに、言語とシステムの仕組みを同じ本の中で往復できる点が本書の強みです。低レイヤーを学ぶ本の中での位置づけを確かめたい場合は、OS と低レイヤーの本の選び方 も参考になります。Rust の所有権の規則を「なぜそう決まっているのか」から理解し、メモリやネットワークを自分のコードで扱えるようになりたい人にとって、時間をかけて読み通す価値のある一冊です。
言及した記事 (3 件)
この本は技書デッキのカードです (攻撃 8) 図鑑でこの本を見る
この本に興味がある方におすすめ
関連する本
関連記事
読んだ本の数より「使った本の数」を数えよ
読書の成果は冊数では測れません。読んだ知識を実務で何回使ったかが、本当の読書の価値です。読書の成果指標を「冊数」から「使用回数」に切り替える方法を紹介します。
技術書の速読術 - 必要な情報を素早く見つける読み方
技術書の速読は「文字を速く読む」ことではなく「読まなくていい部分を見極めて飛ばす」こと。目的別の読み方と速読の 5 ステップを紹介します。
インフラ / クラウド本ガイド - AWS や Docker を本で学ぶ
クラウドインフラ、コンテナ、IaC を学べる技術書の選び方と学習順序を紹介。インフラ本の賞味期限問題と公式ドキュメントとの使い分けも解説します。
関連用語
システムコール
ユーザー空間のプログラムが OS カーネルの機能を呼び出すインターフェース
Go
Google が開発したシンプルで高速なコンパイル言語で、goroutine による軽量な並行処理が特徴
低レイヤー
OS / メモリ / CPU などハードウェアに近い領域。コンピューターの動作原理を支える
RaspberryPi
手のひらサイズの小型コンピューター。学習から電子工作 / IoT まで幅広く使える
goroutine
Go の軽量スレッドで、数十万規模の並行処理を低コストで実現する
プロセスとスレッドの違いとは - メモリ空間 / 生成コスト / 通信方法を比較
プロセスとスレッドの違いをメモリ空間 / 生成コスト / 通信方法の 3 軸で比較。Node.js での使い分け、Lambda の実行環境、データ競合とコンテナの PID 1 の落とし穴まで解説