色々なメモ。

私的メモ。プログラミングとか。主に自分用まとめ。

rust勉強日記(~1/3)

備忘録。

やったこと

  • 「プログラミング言語Rust」の和訳 を読んだ
    • ただし「Nightly Rust」の項は読んでない。
    • 途中で気になった項目などは適宜ググって補充。
    • second edition とどっちを読むか迷ったが、和訳がないのは辛そうだったのでとりあえず初版読んだ。
  • ↑の内容がrust1.6をベースにしているので、最新版との差分を 公式のリリース報告 で追った。
    • 1.6.0と1.22.0の言語仕様上の主な差分(主観)
      • +=-= などの演算子オーバーロード可能に(1.8)
      • 空の構造体の定義方法追加(1.8)
      • panic時のunwindをcatch可能に(1.9)
      • deprecated属性追加(1.9)
      • ? 演算子の導入(1.13)
        • try!と同等のことがより簡潔にできる
        • さらに、 1.22Option<T> にも使えるようになった
      • 型を記述する箇所でもマクロが使えるように(1.13)
      • タプルなどのパターンマッチで .. が使えるように(1.14)
      • ?Sized がwhere句で使えるように(1.15)
      • 'static ライフタイムがstatic/constに対して自動補填(1.17)
      • 構造体のインスタンス生成時の同名変数の省略記法(1.17)
      • pubキーワード使用時の公開範囲指定を追加(1.18)
      • unionの導入(1.19)
      • loopのbreak時に値を返せるように(1.19)
      • 関連定数(associated constants)の導入(1.20)
        • 他言語で言うところのクラス定数に似てる
        • traitで定数名だけ定義して個別の構造体でimplできるのは、C++Javaにはないので便利そう
      • &リテラル'static ライフタイムを持つように(1.21)
        • stackではなくstatic領域に置かれる
      • Drop が constやstatic変数にも使えるように(1.22)
    • 個人的には ? 演算子とpubの公開範囲指定と関連定数が良さそう(小並感)

次にやりたいこと

  • ドキュメントのsecond editionから適当に初版で漏れてそうなところがあれば読む。
  • Rust by Example を読む?
  • 適当に何か作ってみる

気になっている部分

  • rustにおけるファイル分割の慣習(ベストプラクティス)
    • ドキュメントを読んだ感じ、1ファイル=1モジュール が基本っぽいが、他言語での開発でよくあるみたいに1クラス=1ファイルにすると、1クラス=1モジュールになるのかな?
      • struct定義もtraitのimplも全て同一ファイルに押し込む?
    • ここらへんは既存のライブラリのソースコード読むのが良さそう

所感

  • 普段使っているC++と比べて、これだけ言語仕様レベルで安全性を担保できるのが素直に凄い。
  • 一方で、コンパイルを一発で通せるようになるまでがなかなか骨が折れそう。
    • 基本的な構文は覚えたつもり…だが、実際書いてみると特に借用やクロージャまわりで意図と異なる挙動でコンパイルエラーになることがある。難しい。
  • 列挙型が強力なのが嬉しい(ここだけでも他言語に欲しい…)