Files
hakorune/apps/ny-mem-bench/design.md

76 lines
2.5 KiB
Markdown
Raw Normal View History

# Nyashメモリ管理ベンチマーク設計書
## 概要
イベントディスパッチャと揮発性リスナーを使用して、Nyashの決定論的メモリ管理の特性を測定・可視化するベンチマーク。
## 選定理由
- **最小実装**: GUIや並行処理なしで実装可能
- **全特性網羅**: スコープ解放、fini、weak自動nil化、カスケード順序を一度に示せる
- **測定可能**: 明確な数値指標で他言語と比較可能
## アーキテクチャ
### コンポーネント
1. **Dispatcher**: イベント発行者
- リスナーをweak参照の配列で保持
- イベント発行時に死んだリスナーを自動スキップ
2. **Listener**: イベント受信者
- 子リソースBoxを保持してツリー構造を形成
- finiで子→自身の順で解放カスケード
3. **Scope**: ライフタイム境界
- スコープ内でリスナー生成
- スコープ終了で一括解放
## 測定指標
### 主要メトリクス
1. **メモリピーク**: 最大メモリ使用量
2. **解放レイテンシ**: スコープ終了→解放完了の時間
3. **ディスパッチ効率**: イベント/秒
4. **カスケード順序確定性**: 解放順序の一致率100%が理想)
5. **残留メモリ**: 解放後の残存メモリNyashは0が理想
6. **ジッタ**: 各時間の分散(低いほど決定論的)
### 他言語との比較ポイント
- **GC言語Go/Java/JS**: 解放タイミングの非決定性
- **RAII系Rust/C++**: weak掃除ロジックの複雑さ
- **手動管理C**: メモリリーク・二重解放リスク
## 実装計画
### CLI仕様
```bash
nyash-mem-bench dispatch --listeners N --events M --fanout F --depth D
```
### パラメータ
- `N`: リスナー数
- `M`: イベント数
- `F`: 各ノードの子数(分岐率)
- `D`: ツリーの深さ
### 出力形式
```
construct_ms: 123.45
dispatch_ns_p50: 789
dispatch_ns_p99: 1234
fini_ms_avg: 45.67
fini_ms_max: 89.01
mem_peak_mb: 256.78
mem_after_fini_kb: 0
order_ok: true
weak_prune_count: 5000
```
## 実装ステップ
1. **Phase 1**: 基本構造Dispatcher、Listener、Scope
2. **Phase 2**: 測定機能(時間、メモリ)
3. **Phase 3**: 解放順序ログ
4. **Phase 4**: 統計出力・可視化
## 期待される成果
- Nyashの決定論的メモリ管理の優位性を数値で証明
- 論文用の説得力のあるベンチマーク結果
- 他言語実装者にとってのリファレンス実装