1 min read

なぜ Rust なのか

時雨堂では C++ から Rust へ主軸を移し始めています。なぜ Rust を採用したのかと、採用した結果どうかを雑に書いていこうと思います。

社員に Rust チョットデキル がいる

まず最大の理由はこれです。社員に Rust 歴が 10 年以上あり、Rust で分散システムが作れる人がいるからです。詳しい人が居るというのは本当に大事です。

C++ 向けの独自ビルドツールに疲れた

お手伝いしてくれている人に C++ チョットデキル がいるのですが、C++ のビルド周りを色々手がけてくれており、Python で独自のビルドツールをコツコツメンテしてくれていたのですが、良い機会だろうということで Cargo にお世話になることにしました。

LLM の台頭

Rust といえばコンパイルを通すのがとても大変という認識だったのですが、思った以上に LLM が解決してくれることが多いという印象です。実際 Rust チョットデキル 人も同じような印象のようです。


基本的にはこの 3 つが理由です。それ以外に Rust にして良かった点などを雑に上げていこうと思います。

build.rs 便利

build.rs が本当に便利です。prebuilt とかを実現するにしても、Rust でモリモリコードを書いてしまえばいいので。

fmt / clippy 便利

prek と一緒に使っています。本当に便利です。

Tokio 便利

非同期ランタイムは Tokio を採用しています。普段、非同期マルチスレッドの世界で戦っているので、Tokio みたいなのがあるのは本当に助かります。Erlang/OTP の世界で生きている自分にとってもわかりやすいです。

tokio-utiltokio-metricstokio-console など、色々便利なライブラリがそろっているのもありがたいです。

Rustls 便利

TLS は Rustls (aws-lc-rs) を採用しておりますが、tokio-rustls が本当に便利です。HTTPS をはじめ TLS は必須技術なので、とても助かっています。

Tracing 便利

ログは最初は自前で実装しないとだめか ... みたいな気持ちだったのですが、まずは log を使っていって、そこから tracing に切り替えました。tracing とても良くできていて感動します。本当に便利です。

PBT / Fuzzing 便利

Property-Based Testing や Fuzzing も一通りそろってるのが助かります。proptestcargo-fuzz 本当に便利です。扱いやすい上にバグをモリモリ見つけてくれます。

aws-lc-rs 便利

暗号ライブラリは必須なんですが、AWS が BoringSSL フォークの AWS-LC の Rust バインディングを出してくれているのがありがたいです。

no_std 良い

積極的に no_std 化するようにしています。最小限のライブラリで実現していおくことで、コードが読みやすくなるというスタンスです。

Rowan 良い

これは完全に個人的なのですが、formatter / linter を作る際に Rowan を愛用しており、なんて便利なライブラリなんだ ... となっています。


ちょっとした不満も書いていこうと思います。

  • target ディスク容量取り過ぎ
  • 依存がすぐ膨れすぎ
  • GitHub Action で Cache がほぼ使い物にならない

以上。