# Rust

分類：言語
公式：https://www.rust-lang.org/

言語別の既定：§2-5（/s/2.md）

## 選ぶ場面（§2-10）
- レイテンシの上振れが許容できない（p99で10ms未満が厳格に必要、§23-3）：GCによる停止がない
- CPU負荷の高い計算：ネイティブ性能とメモリ効率

## 既定として使う役割
- 開発者向けツール（Linter、フォーマッタ、ビルドツール、パーサ）（§2-9）：Rust
  - 代替 Go：処理が軽く、開発速度を優先したいとき
- ブラウザ内の重い処理（画像・動画処理、暗号、大量データの解析）（§2-9）：Rust → WebAssembly
  - 代替 TypeScript＋Web Worker：処理がそこまで重くないとき
- 他言語から呼び出すライブラリ（§2-9）：Rust（napi-rs、PyO3など）
- 組み込み・IoT・ファームウェア（§2-9）：Rust
  - 代替 C：ベンダーSDKがCしかないとき
- データベース・検索エンジン等の基盤ソフト（§2-9）：Rust
  - 代替 Go：GCの影響が許容できる分散系の制御部分

## 代替として使う条件
- バイナリ配布（§2-5、既定はcargo-dist）：Goと配布の仕組みを揃えたいとき
- CLIツール（§2-9、既定はGo）：起動時間・バイナリサイズ・処理速度を詰めたい
- エッジ関数（§2-9、既定はTypeScript（Cloudflare Workers））：CPU負荷の高い処理がある
- 機械学習の学習・推論（§2-9、既定はPython）：小さなモデルを単一バイナリで配りたいとき

## 採用の根拠（§22-2）
GCがなく、C/C++並みの性能とメモリ効率を出しながら、メモリ安全性をコンパイル時に保証できる。WebAssemblyやネイティブ拡張として他の環境に組み込みやすい。近年の高速な開発ツール（Biome、Ruff、uvなど）の多くがRust製で、実用性が証明されている
懸念と回答：「開発が遅くなるのでは」→ 性能・安全性が効く箇所に限定して使い、その他はGo・TypeScriptで書く（§2-10）

## ケース別の構成（§19）
- インフラツール・CLI：性能が厳しい箇所＝Rust（clap、Tokio）
