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』を一足お先に読みました。Rust に関する日本語書籍の発刊が増えてきており、読むより発売するペースが上がっている気がします。私もだんだん精読するより積むほうが増えてきてしまいました。

今回も例のごとく、全体に目を通した上で感想などを書いていきたいと思います。本自体は2/12発売のようです。

本書はアプリケーションを実装しながら Rust を学んでいくというより、Rust に登場する特有の概念を解説しながら Rust を学んでいくというコンセプトになっています。その過程で他のプログラミング言語の実装と比較しながら、他の言語と Rust で違う点を説明したり、あるいは共通しているポイントを見つけたりしながら Rust 特有の概念を理解していきます。特有の概念というのは、代表的なものは本書の表紙でも紹介されている「所有権、型、トレイト」です。たしかにこれらを押さえれば、一旦 Rust は書き始められるかと思います。

『実践Rustプログラミング入門』をはじめとしたアプリケーションを実装しながらプログラミング言語を解説する本ですと、どうしてもサンプルコードを多く掲載する関係で本が分厚くなりがちです。しかし本書は類書と比較してもポイントをしっかり押さえつつもかなり薄めに仕上がっており、「他のプログラミング言語はそれなりに使用してきた*1が、Rust 特有の話だけサクッと学びたい」という方はこの本がよいのかもしれません。

最初にまず変数にまつわる話題を取り扱ったあと、その際登場する所有権について解説されます。その後に、Rust に登場する代表的な型について紹介されます。その中で Option や Result、Box や Rc をはじめとするスマートポインタも解説されます。スマートポインタには概念図が記載されており、理解しやすく書かれていると感じました。そうした話題を一通り押さえたあとに、Rust での抽象化の話題(トレイトやジェネリクス)が扱われます。その他の話題として、ファイルの入出力や関数型プログラミングの側面を利用した Rust プログラミング、並列処理・並行処理、あるいは非同期処理に関する話題、そして C との FFI が扱われます。

本書の目次はこちらのサイトに掲載されていますので、興味がある章があるようでしたら読んでみるとよいかもしれません。

本書の良さ

  • Rust 特有の概念を丁寧に説明している。
  • とくに、メモリ管理にまつわる部分は図でわかりやすく説明している。
  • 他の言語をそれなりにやってきた方は楽しめるかも。

Rust 特有の概念を丁寧に説明している

「所有権」や「ライフタイム」あるいは「トレイト」など、最初他の言語から Rust に入門すると理解に苦労する概念をとくに丁寧に説明しています。あとがきにもありましたが、もともと著者の方もこうした Rust 特有の概念の理解に苦労したうちの一人で、どのように説明すればわかりやすく伝えられるかを考えて本書を書かれたとのことでした。あるいは、変数の代入と束縛については微妙に違いがある話など、他の入門書では見ない話題が度々書かれていました。

トレイトとジェネリクスの説明に1章丸々割いているのは本書の大きな特徴だと思います。Rust ではこの2つの概念を用いて抽象化をゼロコストで行えるという特徴がありますが、これらを懇切丁寧に解説していると思います。dyn Traitimpl Trait の話題、ならびに動的ディスパッチと静的ディスパッチにまつわる話題が解説されます。

とくに、メモリ管理にまつわる部分は図でわかりやすく説明している

Rust 特有の概念として所有権をはじめとするメモリ管理の概念があります。それを理解するのは最初の関門となるわけですが、本書では図を使って直感的に理解できる説明を心がけているようです。要所要所で図によるメモリ管理や処理の遷移がよく解説されており、ひとまず雰囲気を掴むのにはこれで十分だと感じました。

他の言語をそれなりにやってきた方は楽しめるかも

この本では C/C++Python との比較がまま登場するため、他のプログラミング言語をいくつかよく触ったことがあり、プログラミング言語間の思想や目的の違いを理解されている方にはとくに楽しめる内容になっていそうだと思いました。

ただ本書はあくまで Rust への入門書ですので、「所有権のチェックはそもそもコンパイラ内部ではどのように扱われているか」「トレイトと実際の実装の紐付けがコンパイラ内部ではどのように扱われているか」といったような言語処理系が好きな方が興味を持つであろう話題には触れられてはいません。そうした高度な話題をタイトルから期待されている方には少し向かないかもしれません。

Rust 入門時に必要な知識がコンパクトに得られる一冊ではないかと思います。「作りたいものは決まっていて、すばやくキャッチアップしたいが手頃な資料がないだろうか?」と考えていた方にはおすすめできるかもしれません。

*1:それなり、の定義は難しいですが…