ADR-001: Rust採用
Context
jamjamはリアルタイム音声通信アプリケーションであり、以下の要件がある:
- アプリケーション起因の遅延 10ms以下
- クロスプラットフォーム(Windows / macOS / Linux)
- メモリ安全性
- 長時間動作での安定性
言語選択肢:
- C++: 高パフォーマンス、メモリ安全性の保証なし
- Rust: 高パフォーマンス、メモリ安全性保証、モダンなツールチェーン
- Go: GCによるレイテンシスパイクの懸念
- C: 高パフォーマンス、メモリ安全性の保証なし、開発効率低
Decision
Rustを採用する。
Consequences
メリット
- メモリ安全性: コンパイル時にメモリ関連バグを検出
- パフォーマンス: C/C++同等のパフォーマンス
- クロスプラットフォーム: 単一コードベースで全プラットフォーム対応
- エコシステム: cpal(オーディオI/O)、tokio(非同期)等の成熟したライブラリ
- ツールチェーン: Cargo、rustfmt、clippyによる開発効率向上
- FFI: Flutter(flutter_rust_bridge)との連携が容易
デメリット
- 学習コスト: 所有権システムの理解が必要
- コンパイル時間: C++より長い場合がある
- エコシステム: C++ほど音声系ライブラリが豊富ではない
リスク軽減
- 音声系で必要なライブラリ(cpal、opus-rs)は十分に成熟している
- Rustコミュニティは活発であり、問題解決のリソースが豊富