とても良い言語

  • 初めて書いたのは2020-08-06らしい

なぜ良い?

  • すべてが明示的だから
    • 可変・不変
      • デフォルトは不変(ここも良い)、可変にしたい時だけmutを付ける
      • メソッドも &mut self か &self かという点で区別できる
    • move、参照
      • C++だとコピーコンストラクタが呼ばれるかどうか、JS等だとシャローコピーか否かを気にしなければならない
    • キャスト
      • Cは暗黙的にキャストする!
    • 所有権
      • Shared XOR Mutable (共有か、可変か)もうれしい
    • ライフタイム
      • オブジェクトがいつまで有効かを示すもの
      • C++でfreeしたオブジェクトを参照してしまってセグフォするというやつ、何度やったかわからん
    • (dropは暗黙的じゃないか?)
      • ファイルを open したあとにdropすると自動でcloseしてくれてうれしいが……
  • ビルドツール・フォーマッタ等が公式から提供されていて、さらにそれらの質が良い
    • CMakeLists.txt を書かなくて済む!(CMake の悪口)
  • if が式
  • パターンマッチング
  • Option / Result の標準的なサポート
    • Result に至っては構文レベルでサポートされている(? 演算子)
  • class ではなく trait
    • class のネスト地獄はもうこりごりだよ〜
    • トレイト境界ありがとう!
  • enum による直和型
    • パターンマッチングの強力さとも相まってありがとうになる
  • if に必ず {} が必要
    • 割とどうでもいいが、個人的にC++を書くときはカッコ内が1行だけであっても書くようにしているため
  • エラーがまとも
    • これはC++の悪口

何がよくない?

  • 所有権が大変
    • 学習に時間がかかる
    • 他の言語だとGCに任せたらふつうに書ける処理を愚直に書けず、コンパイルを通すのに時間がかかる
  • 低レイヤ部分が取り上げられがち
    • 「メモリ管理はしたくない」という理由によりRustを選択肢から外す人が多い しねえよ!メモリ管理……
      • 本当にプログラマがメモリを管理しなければならないのはCおよび古いC++では?これらは malloc() / free() もしくは new / delete を呼ばないといけない
      • 新しいC++だと大抵スマートポインタじゃないですか?
        • 組み込みの話はしていない(組み込みにおいて「メモリ管理はしたくない」という主張が出るわけなさすぎる)
    • やろうと思えばメモリアロケーも自分で書けるのはRustの良いところ(基本的に書かなくて良い)
  • unsafe が不当に攻撃されがち
    • 結局 unsafe 使わないと書けないじゃんw 安全とは?w みたいな浅い批判がたくさんある
      • C++は全箇所 unsafe だが?
      • セグフォといったメモリ関連の不具合が生じたら、原因箇所を unsafe という局所的な領域に絞って探せるのはうれしいと思う
  • ビルドが長い
    • 特に crate をたくさん追加した時(依存が増えるため、ビルド時間がどんどん長引いていく)
  • コミュニティが良くない
    • Rustが良いことを示すために他を過剰に下げる人がいる
      • 気をつけよう……(ほぼ自戒)
  • 生成されるバイナリがデカい