3、4回の挫折を経てようやく「なんとなくRustわかってきたかな」というところまで来れたので、個人的に効率的と考える入門ルートを紹介してみたい。
結論から書くと、
これで実践のじの字まではたどり着ける。
The Rust Programming Language - The Rust Programming Language
もちろん充実しているし、丁寧な書きぶり・カバーぶりなのでいろいろなところでおすすめされている。でも、前知識なしに&おおまかな全体像を持たず読もうとするとだいたいトレイトあたりで力尽きる。実際にプログラムを組むためにはそのあとの.iter()やクロージャを形式的にでも分かっていないと厳しい。Rustの場合は、公式ドキュメントはその他の資料で迷子になったときに戻ってくる場所として認識しておいたほうがよいと思う。
C、C++の知識のない人間がRustを始めるにはまずここからがよいと思う。簡潔な語り口と丁寧な説明で、入門書の名前にふさわしい。基本文法や所有権のおおまかな概念理解をすませておくと、先々の言語仕様にも必要以上にひるまずに進めるはず。
なんとなくいけそうな感じになってきたら、何でもいいから書いてみる。Rustはコンパイラに手取り足取り教えてもらって初めて分かるようになる言語だ。だから言語に最短で慣れるには、エラーを取り除くということをたくさんやる、つまりエラーがいっぱいのコードを書くのがいい。
作りたいものがなかったり、作りたくてもハードルが高すぎる場合は、競技プログラミングの問題を解いてみよう。
AtCoderでもいいが、I/Oのことを考えないでとりあえず書いてみたい場合はLeetCodeやProject Eulerがおすすめ。前者は数学以外の問題もたくさんあり、後者はすべて数学の問題になっているという違いはあるけれど、いずれも基本的な配列の操作や制御フローの学習に向いている。特にLeetCodeは以下の点でおすすめ。
雰囲気で書けるようになってきたらこれを読んで写経してみる。ふわっとした知識だったところが整理され、理解が深まる感じがする。用語の説明不足も、ここまできたら許容範囲に収まっているはず。
逆に言うと、雰囲気ででも書けないと、序盤からわからない用語が出てきてつらい気持ちになるはずなので、これで入門するのはおすすめできない。タイトルの入門は「実践的なプログラミングへの入門」であって「文法や基礎知識への入門」ではない。
公式で提供されているRustコードのデバッグ問題集。正直駆け出しにはかなり難度が高い。雰囲気が分かってきたトピックの穴を洗い出すために使う、くらいでちょうどよさそう。
HaskellとRustの比較記事をいくつか読んだが、Haskellの知識があれば万事うまくいくわけでは全然ないので、足場にしすぎないことが大事。
Haskell | Rust |
---|---|
型クラス | トレイト |
Maybeモナド | Option型 |
Eitherモナド | Result型 |
data | struct enum |
case | match |