Programming Rustを読んだ

Posted on 2018-03-15 , Tags: Rust, Book Review

Programming Rust を読んだので感想を書く。

読んだ目的

Rustについては、これまで小さいツールを作ったりして、気がむいたときに勉強していた。普段Ruby on RailsでWebアプリケーション作っているとRustが得意とするようなシステムプログラミングの領域に関わることがあまりなく、新鮮だった。今回、さらにRustの考え方などを身につけたいと思い、読んだ。

感想など

まだ一通り通読したところで、なかなか身についたとは言い難いが、ところどころメモリ上でのデータ配置の図がでてきたり、自分の普段の業務だとあまり意識しないところまで書いてあって、学生時代にC言語と格闘したことを少し思い出した。

Concurrency

特にChapter19 Concurrencyが印象に残っている。
Concurrencyについては、SendSyncという2つのtraitによって、それぞれ「他のスレッドに安全に送ることができること」「スレッド間で安全に共有できること」が宣言できる。安全というのはデータ競合などの予測できない挙動の原因となるものが発生しない、という意味だ。SendSyncを内包している。i32boolなどはSend+Syncだが、Cell<usize>などはSendであるがSyncでない。Rc<T>SendでもSyncでもない。
あるスレッドから他のスレッドヘ値を送る操作では、Sendのみを許可することで、Rcなどデータ競合が発生しうるものをうっかり操作することを防いでいる。
スレッドセーフかどうかの検査もできるだけコンパイル時に寄せることで、安全にプログラミングできるようにする、というのはなかなか考えられているなと思った。

今後

最近はturingcomplete.fmという低レイヤーの話が中心のポッドキャストもあり、低レイヤーの話が気になっているので、Rustを中心としてシステムプログラミング関連の内容も興味が続く限りはぼちぼち勉強していこうと思う。
あと、コマンドラインツールなど、自分が使うものをRustで作っていきたい。
仕事で使うかどうかは、もちろん自分ひとりの好みでは使用技術を決められないのでなんとも言えない。しかし、この間試しにRubyで書いたバッチ処理をRustでおきかえたところ、実行にかかる時間が30分から5分になった。もちろん元のRubyのコードの書き方が悪かったり、いろいろな問題があっての結果だとは思うが、例えば開発環境の補助ツールなど、用途を限れば仕事の中でも使えそうだと思っている。