Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

『詳解Rustプログラミング』(Rust in Action)を読みました

先日発売になった『詳解Rustプログラミング』という本をひとまず一通り軽く読んでみました。実は原著の Rust in Action をすでに読んでしまっていたので、内容の流れは把握していたのですが、私は一応日本語ネイティブなので日本語の書籍は非常に嬉しいですね。

Rust in Action

Rust in Action

Amazon

本書をまず読んで最初に思い出したのは、私も大好きな『低レベルプログラミング』という本でした。この本は C とアセンブラで書かれているのですが、これを Rust でやり直す感覚を覚えました。コンピュータサイエンスやコンピュータアーキテクチャの話題が豊富で、大学のコンピュータサイエンスの講義を受けているような印象を持ちました。

あるいは、『Go ならわかるシステムプログラミング』の Rust 版と言ってもよいかもしれません。

従来はこの分野の入門書は C あるいは C++ で書かれていることが多かったと思いますが、ついに Rust による書籍が出たと、原著を読んだ当初に思いました。最近はこうした CS の基礎の本は Python で出ることも増えたように思いますが、Rust での解説はこれから市民権を得ていくでしょうか。もしそうなるとすると、自分が一番馴染みがある言語で学べることになりとてもワクワクします。

本書が一番特徴的なのはやはり、幅広い分野にまたがる適切な題材が豊富に用意されているという点だと思います。4章ではまずまずの規模の状態の書き換えが発生する人工衛星と地上の通信を模したアプリケーションを作ります。5章では関数呼び出しくらいまでを行える CPU エミュレータを実装しますし、6章ではメモリの動きを見るためのグラフィカルアプリケーションを実装します。7章では実用的なキーバリューストア、8章では OSI 参照モデルを徐々に掘っていくようなアプリケーションを実装します。最後は簡単な OS までを実装します*1。著者の知見と知識の幅広さ、そして実装力がすごいです。

Rust の文法や機能の解説書としての側面からですと、他の言語から Rust に入門するユーザー*2がつまづきやすいポイントを丁寧に押さえています。本書はまず2、3、4章で軽く Rust の基本的な文法について説明したあと、5章以降でさらに Rust の踏み込んだ機能について解説されます。この踏み込んだ機能の解説が白眉でした。Copy トレイトや Clone の説明、スマートポインタの説明やトレイトオブジェクトの説明は、私が以前共著で書いた本では載せなかった記憶がありますが、本書は適切な題材とともにそれらをよく解説しています。

本書で取り扱っていない話題があるとすれば、Rust アプリケーションの本番運用にまつわるものでしょうか。たとえばパフォーマンスチューニングを Rust ではどのように行っていくかという話題や、Rust アプリケーションの CI/CD に関する現場に近い実務的な話題は載っていません。また、マクロやテストに関する細かめの話も載ってはいません。本書の主題はあくまで Rust を使ってシステムプログラミングに入門することだからです。この点をもし学びたいようであれば、別の記事や書籍を参照する必要はありそうでした。

ただそうした「取り扱っていない話題」については重々承知のようです。カバーには次のようなコメントが付されており、本書の性格をよく表しています。

本書は包括的な教科書や参考書ではない。Rust とその標準ライブラリに関して、専門的で特別な扱いが必要な部分は略している。本書の目標は、十分な基礎知識を提供し、必要に応じて特殊なトピックを学べる自信を与えるということだ。

翻訳については、正直サラッと読み流した程度なのでコメントするには適切ではない精読量かもしれませんが、私は違和感ない水準でよく訳されていると感じました。読みやすかったです。技術書だと、正直言って翻訳された結果日本語の文章がよくわからなくなっている本が多々あるといえばあるのですが、本書の翻訳は非常によかったと思います。

本書の主題であるシステムプログラミング(やコンピュータアーキテクチャコンピュータサイエンスの基礎)を学ぶことは、ソフトウェアエンジニア自身の足腰を強化する第一歩だと思います。Rust で足腰を鍛えたい方にはおすすめの一冊だと思います。私も引き続き、日本語で楽しみたいです。

*1:ソースコードが公開されています

*2:ちなみに著者は Rust コミュニティの運営にも携わっており、私自身も RustFest Global の運営で交流があったりします。コミュニティ運営でユーザーと接する機会が多いからでしょうか、よくポイントを押さえていると思います。