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 をはじめて知ったのは2年前でした。ある Googler が記事の中で Rust に対して惜しみない賛辞を送っていた記事でした。私はこの記事に大変共感し、感銘を受けました。Rust がやりたくなった。

当時の私は、金融業界で使われるリスク管理計算機の開発に携わる開発者でした。当時は Java で計算機の業務ロジックや金融工学計算のロジックを書いていました。その業務を日夜送る中で、複雑化した並列処理計算や並行処理計算にまつわる多くの障害に直面しました。それらは原因がよくわからないけれども、並列・並行処理起因であることだけはわかる障害でした。

並列処理・並行処理で苦しめられた経験がなかったとしたら、Rust という言語に興味をもたなかったかもしれません。当時そういった苦しみを感じていた私は大きく感銘を受けました。プログラミング言語の処理系の力でこれほど多くの問題を解決できるのか、と思いました。プログラミング言語ってすごいですね。それが私の Rust との出会いでした。

Rust は私のプログラマとしての実力を格段に伸ばしてくれたと思います。Rust をやる上では避けられないメモリ周りの知識。あるいは関数型プログラミング由来のパターンマッチングやコンビネーターで実装をつなげていくスタイル。型クラス、静的ディスパッチ。ゼロコスト抽象。多くのプログラミング言語のベストプラクティスをふんだんに取り込んだ言語だからこそ、多くの学びがいに満ちていました。Rust を学習し使いこなすに際し、多くの用語を調べ、概念を苦労して理解し、吸収し、成長させてもらったなという気持ちです。学習コストとはそういうものだと私は思います。いわゆる No Pain, No Gain です。

あれから2年経ちました。Rust は当時とは比べ物にならないほどに流行の兆しを見せ始めています。海外では、StackOverflow の愛され言語ランキングにおいて、ここ数年つねに1位を取り続けています。Reddit でも、Rust に関する記事を見ない日はありません。

日本では、日本語訳された資料や文献がとても増えています。私は当時、Rust の多くを英語で勉強しました。書籍は当然ありませんでした。ネット上には資料はあったけれど。今は、日本語の、それも日本人の書いた書籍が出る時代になりました。感慨深さを覚えます。

その矢先、とてもいい本が出ました。

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]

κeen さんより新刊を頂戴し、『実践 Rust 入門』を一足お先に読ませていただきました。ありがとうございます。日本の Rust ユーザーにぴったりな本だと思います。現場で「ここがかゆい」と思うところによく手が伸びていると思いました。これは、普段から Rust を使用している現場の達人にしかなしえないわざでしょう*1。私はこの巨人の肩に積極的に乗っていきたいと思いました。

『プログラミングRust』では、どういった機能が Rust に用意されているのかについての説明に多くの紙面を使っていますが、本書ではどういった機能があるかに関する説明に加え、各機能をどういった場面で使用したらよいのかについても言及されていることが多いです。 たとえば、Box<T> 型について説明する際、本書では次のように記載されています。

Box ポインタは以下のような場面で使われます。

コンパイル時にデータサイズが決まらない型を扱うとき。たとえば再帰的なデータ構造を実現するにはBoxやRcのような値を所有するポインタが必要になる。

・大きなデータをコピーすることなく、その所有権を他者へ移動したいとき。

・トレイトオブジェクトを作成したいとき。

Rust をはじめられる方の中には、もともと C/C++ ではなく、 JavaPython といった処理系が優秀で細かいメモリ制御をほとんど必要としない言語を触っていた方もいらっしゃるかと思います。私もその一人でした。他言語出身者からすると、Rust には、主にメモリ周りの機能に「どう使ってよいのかいまいちイメージがつかないもの」があります。それらの疑問に、本書はよく答えてくれています。私も読みながらはじめて用例を知ったものがありました。

本書は「基礎編」と「実践編」にわかれています。とくに9章からはじまる実践編は、実際にアプリケーションを作る章なのですが、「パーサー」「パッケージ」「Web アプリケーション」「FFI」と続きます。FFI が載っている本は、私の知る限りではありません。私も FFI を使った経験はなく、本書のチュートリアルをぜひこなしてみたいと思いました。

これから Rust をはじめるユーザーや、すでに使っているものの理解を深めたいユーザーにはうってつけの一冊であること間違いなしです。κeen さんもご自身でブログに本に関する話を書いているのでそちらもご覧ください。また、詳細な目次。個人的には、仕事で Rust をはじめるとなったときに「とりあえずこれを読んでおけ!」と自信をもって言える一冊が出版されて、本当に嬉しく思います。

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]

*1:私は Scala ユーザーなので、Scala 界隈のアナロジーを用いて本書を説明しておくと、『プログラミングRust』がコップ本だとしたら、本書は『実践 Scala 入門』にあたるといえるでしょう。