「実践 Rust 入門」を読んだ
どうも、たくチャレ(@takuchalle)です。
「毎年新しい言語を触ってみよう」という目標をひっそりと立てていて、一昨年はGo
で社内のツールを作ったり、去年はFlutter(dart)
でアプリをリリースしてみたりしました。
今年はRust
を勉強してみようと思ったので、本書を読みました。
なぜ Rust か
Rust
は「速度、並行性、安全性」を特徴とし、C/C++
に置き換わるシステムプログラミング言語を目指しています。
私は普段C/C++
を使って仕事していて、多くのC/C++
プログラマと同じようにメモリ解放タイミングやバッファオーバーランなどのバグにずっと悩まされています。
Rust
はその課題に対して所有権やライフタイムというアプローチでコンパイル時に早期発見できることに興味を持ったことと、ベアメタルでも使えるくらい低レイヤも視野に入ってることが自分の興味にマッチしたことから、Rust
が候補に上がりました。
下記の雑誌のRust
特集を読んで写経して、感触も良かったのでRust
を選びました。
直近Rust
で具体的に作りたいアプリやツールが特にあるわけではないので、LeetCode
の課題を書けるくらいRust
を習得できることを目標に本書を読みました。将来的にはOS
とかCPU
のシミュレータとか書いてみたいなぁとは思っています。
書評
目次はこんな感じです。
第1部 基礎編
第1章 Rust の特徴
第2章 はじめての Rust プログラム
第3章 クイックツアー
第4章 プリミティブ型
第5章 ユーザ定義型
第6章 基本構文
第7章 所有権システム
第8章 トレイトとポリモーフィズム
第2部 実践編
第9章 パーサを作る
第10章 パッケージを作る
第11章 Webアプリケーション、データベース接続
第12章 FFI
第10章と第12章は、必要になった時に読めばいいやと思ったので、それ以外を読んだ時点での書評です。
第1章、2章でRust
の特徴やインストール方法などの解説があります。Rust
の導入事例を紹介していて、具体的な課題に対してRust
を使ってどう解決したのか分かるので良かったですね。あと、Tier2
だけどGoogle Fuchsia
も動作保証ターゲットになってることに驚きました。
本書の構成としては、Rust
の文法などの説明に入る前に、いきなりRPN計算機(第2章)やバイトニックソート(第3章)を実装する話になるので、他の言語を勉強したことない初学者は面食らうかもしれません。
逆に他の言語の経験がある人はすんなり入れるのではないでしょうか。特にバイトニックソートはPython
のコードを参考にしつつ、最低限の実装から始まり、ジェネリクス対応、クロージャによるソート順のカスタマイズ、並列ソート対応と拡張していく流れなので、Rust
を俯瞰しつつ、自身の知っている言語と比較しやすいのではないでしょうか。
第4章と第5章はRust
の型についてです。宣言したデータがスタック領域に確保されるのか、ヒープ領域に確保されるのか図を交えて解説してくれるので、非常に分かりやすかったです。性能やメモリマップに影響するので丁寧に説明されていて良いです。
第6章はRust
の文法についてですが、文法的にはトリッキーなものはなかったけど、型強制が暗黙的に行われるのでハマりそうだなと感じました。if
やmatch
が文ではなく式なので、値を返すことを意識したらすっきり書けそう。
第7章はRust
の特徴である所有権システムやライフタイムの紹介です。Vec
のサブセットを実際に作っていくことで所有権システムを学んでいきます。ここでも図を用いて所有権の状態やメモリの状態を解説してくれるので非常に分かりやすいです。ライフタイムや借用規則の概念は難しいので、今後手を動かしながら理解を深めていこうと思います。
第9章ではここまで学んだことを用いて、より実践的な内容になっていています。再帰降下法を用いてパーサを作っていき、最終的にはインタプリタやコンパイラも作る意欲的な内容になっています。CLI
の作り方、テストの書き方やエラー処理方法も学べます。一方で、後半の解説は駆け足だなという印象を受けました。
第11章はざっくりしか読んでないのですが、非同期処理について学べます。async/.await
がバージョン1.39で安定版になりましたが、本書はまだ安定版が出る前に書かれているので注意してください。
本書を読んでLeetCode
の課題が解けるくらいにはなりました。まだ効率的に書けると自信を持って言えるレベルではないですが、コンパイルエラーには落ち着いて対処できるようにはなりました。オンラインドキュメントも読めるようになったので、ガンガン経験を積んでいくつもりです。