# 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の決定論的メモリ管理の優位性を数値で証明
- 論文用の説得力のあるベンチマーク結果
- 他言語実装者にとってのリファレンス実装