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 書きかた・作りかた』を、一通り目を通していました。感想を記しておきます。なお感想は、例のごとく全体に軽く目を通して、いくつかサンプルプログラムを写経してみた程度の上でのものです。あらかじめご了承ください。

Python から Rust に入門するという切り口

最近はRustの本が多く出版され始めており、読むよりも買うほうがだんだん多くなってきてしまっています。とくに単なる言語の入門にとどまらず、さまざまな切り口から解説する本が増え始めているように思います。本書もそのひとつで、Python から Rust に入門しようという非常に特異な切り口の一冊です。

Python から Rust という切り口は、多少なりとも求められている気がしています。SNS を見ていると、データサイエンティストや機械学習関連の研究者の方が Rust を使い始めたよ、という話を見かけるようになりました。私も仕事上そういった方々と関わりがあるのですが、Rust への注目をそれなりに感じます。

何より私が入門したときは、Java からいきなり Rust に入門してしまったので、「Java で書くこれは Rust ではどう書くのだろうか…?」「トレイトって何」「参照の使いどころがわからない」などと日々調べながら苦労して覚えていった記憶があります。他の言語での書き方を Rust に直すとどうなるかという切り口は、そうした数年前の私のようなユーザーに非常にフィットすると思います。この本をきっかけに、他言語から Rust に入門するユーザーも増えていくのではないでしょうか。

Rust は言語仕様がライトではない関係で解説も重厚になりがちではあるのですが、JavaPython 出身者は最初面食らってしまうかもしれません。私も面食らった一人でした。しかし本書は、全体的にライトな解説の仕上がりになっていて、そうしたユーザーであってもつまづきにくく構成されているなと感じました。

説明が明快でわかりやすい

解説は非常にライトでつまづきポイントを抑えておりわかりやすいと思いました。Rust は、PythonJava のようないわゆるレイヤーの高い言語を触っていると登場してこない概念が平気で登場してきます。たとえば参照は、そうした言語のユーザーを最初に悩ませるポイントになると思います。本書では図や解説文でそうした慣れない概念をよく解説しています。

これは少し語弊があるかもしれませんが、『詳解Rustプログラミング』や『プログラミングRust』は、どちらかというとアカデミック寄りの説明方法をしていると思っていました。一方で、本書はそうしたアカデミックなバックグラウンドのない方であってもわかるように、実学的で平易な説明の仕方をしていると感じました。

豊富なサンプルでテンポよく Rust を学べる

本書では非常に豊富なサンプルでテンポよく Rust の文法と使い方を学んでいくことができます。Rust と Python で共通する概念が登場するアプリケーションでは、まず Python で実装し、そのあと Rust で実装し直してみるという流れを取ります。本書の後半に登場する Rust 特有の概念(トレイトやジェネリクスなど、Python にはない概念)については、Rust コードのみでの解説です。まずは Python から Rust への変換で基本的な書き方に慣れ、Rust の応用的な話に踏み込んでいく、といった構成でしょうか。

題材が個人的に好きで、迷路の自動生成、乱数生成器のフルスクラッチや画像加工、音源の制作&wavファイルの生成、チャットサーバーの実装から簡易的なプログラミング言語の実装まで幅広かったです。いくつか実装してみましたが、個人的にも非常に楽しめました。

機能の解説は網羅的

サンプルアプリケーションを実装し、それを通じて言語の機能を解説する形式の本だと、どうしてもサンプルアプリケーションの選定によって紹介する言語機能が網羅的にならないという問題があるかと思います。たとえばスマートポインタの解説は意外とサンプルアプリケーションの規模だと紹介の流れが難しく、苦心するポイントかもしれません。

本書は応用的な話、とくにスマートポインタまで含めて網羅的によく解説されていると思いました。スマートポインタは私も最初よくわからなかったので、解説は必須だと感じていました。肝心のスマートポインタの解説のサンプルアプリケーションは、いわゆる単方向リストの実装が採用されていました。単方向リストでは、参照と参照外しがまずまずハードに登場しますが、順を追って丁寧に解説していてわかりやすかったです。

スマートポインタ以外にも、マクロやC・Pythonとのつなぎ方、WebAssembly にいたるまで結構網羅的です。マクロの説明の仕方は個人的にも苦労するポイントだと感じていたのですが、本書の説明の仕方は真似したいです。

まとめ

サンプルが豊富で日曜工作にうってつけです。今週末の予定が埋まりました。