実践Rust入門 3日目

3章途中から3章最後まで。

3章は、バイトニックソートの実装を、Python版→Rust版1st →2nd → 3rdと進化させていくスタイル。
最初の方は前回バージョンからの差分箇所のソースにコメントが付いているのだけれども、途中からそういうコメントはなくなった。
書籍と自前での手打ちソースだけだと、見比べるのがちょっと辛かった。
もしかすると、暗にしっかりコード見てねというメッセージが込められているのかもしれない。
まぁ紙面の都合なんでしょうけど。

まぁ久々にコンパイルエラーを量産して、何だか楽しくなってきた。
Rustコンパイラのメッセージは本当に親切だ。
エラーの場所も原因も書いてくれるし、修正方法まで提案してくれたりする。

また、Goみたいにビルド時にパッケージというかクレートをダウンロードしてくれるのは便利。
Cargo.tomlに必要なクレートの記述が必要だけども。
各クレートのバージョン管理もシンプル。

3章の冒頭にあるように、Rustによる実装の雰囲気は感じれたかな。
構文とかほぼ覚えてないけど。
結構コード書かないと覚えられる気がしない。

おぼえがき
  • Rustはオーバーロードをサポートしていない
  • クロージャは定義が同じでも全て別の型扱い
  • ifは式っぽい
  • Rustは乱数生成器が標準ライブラリにないらしい。ちょっと新鮮
  • 並列化クレートRayon
課題
  • num_cpusによる物理コアの検出数があってないのは環境のせいだろうか(FreeBSD 12)
    • 確認環境のi5-4300uは2コア、4スレッドっぽいのだけれども、物理コア数も論理コア数も4という結果に
    • そもそもdmesg見ると、4 CPUsを検出しているっぽい。あれ、元々論理コア表示されるんだっけ?
  • 自前で手打ちした、benchmark.rsがちゃんと動いて無さげ。(1コア版の40倍以上の時間がかかってた)。
    • どこミスったんだ。明日、公式サポートのコード落としてdiffとるか
      • (2019.07.06 追記) sub_sortの並列処理のとこで呼び出す関数が親関数のdo_sortになってたー。コピペしたらちゃんと確認しましょう
  • neovimの補完動いてなかった(バッファ内からしか候補拾ってなさ気)
    • 補完ないと9章以降辛そうだな。。。

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

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