# Phase 10.10 – Python→Nyash→MIR→VM/Native ラインの実用化整備（Box-First 継続）

目的: Nyash→MIR→VM/Native の実行ラインを日常運用レベルに引き上げ、GC/デバッグ/HostCallの柱を整備する。

## ゴール（DoD）
- エンドツーエンド実行ライン（Parser→AST→MIR→VM→JIT）がビルトインBoxで安定（RO/一部WO）
- GC切替（Null/Counting）をCLI/Boxから操作可能、root領域APIが一箇所化
- デバッグ/可視化の旗振り（DebugConfig/Box）でJIT/VM/イベント/DOTを一本化
- HostCall: 読み取り系はparam受けでJIT直実行（allow）。書き込み系はポリシー/whitelistでopt-in可能
- 最小ベンチと回帰（サンプル）でラインの劣化を検知

## 事前整備（現状）
- HostCall基盤: Registry/Policy/Events/Boundary（10.9-β/δ完了）
- JITイベント: `NYASH_JIT_EVENTS=1` 時に `threshold=1` 自動適用でLower確実実行
- 戻り境界: CallBoundaryBox で JitValue→VMValue を一元化（ハンドル復元含む）

## ワークストリーム
1) GC Switchable Runtime（phase_10_4_gc_switchable_runtime.md）
   - 目標: NullGc/CountingGc の切替、root領域/バリアAPIの一本化
   - タスク:
     - NyashRuntimeBuilder: GC選択をCLI/Box反映（NYASH_GC=none|counting など）
     - ScopeTracker/enter_root_region()/pin_roots() の公開インターフェース確認
     - CountingGcの統計出力（roots/reads/writes/safepoints）
     - 書き込み系HostCallにバリアサイトのフック（Map/Array set/push）
   - 受入: GC切替コマンドで統計差分が取れる／HostCall書き込みでバリアサイトが加算される

2) Unified Debug System（phase_10_8_unified_debug_system.md）
   - 目標: デバッグ/観測フラグを DebugConfig/Box に統合（CLI/env/Boxの単一路）
   - タスク:
     - DebugConfig（Rust側）: dump/events/stats/dot/phi_min 等を集約
     - DebugConfigBox: Boxから get/set/apply/toJson/fromJson
     - Runner: CLI→DebugConfig→env/Box の一本化（env直読み排除）
     - イベント出力先: stdout/file 切替の設定（NYASH_JIT_EVENTS_PATH のBox反映）
   - 受入: Boxから apply 後、JIT/VM/DOTの挙動が即時反映／JSONLが指定先に出力

3) E2Eラインの実用化（builtin→pluginの足場）
   - 目標: ビルトインBoxで日常運用レベル、プラグインBoxはTLV HostCallの足場を準備
   - タスク:
     - Lowerカバレッジの整理（BoxCall/RO/WO・param/非paramの分岐ダンプ）
     - 署名管理: レジストリのオーバーロード運用方針（canonical idと派生idの整理）
     - 返り型推論: MIR Builderのreturn_type推定を確認（main/補助関数とも）
     - Plugin PoC: TLV/handle経由のread-onlyメソッド1つをHostCall経由で通す（allowログまで）
   - 受入: 代表サンプル（math/map/array/string）でallow/fallbackが意図通り、plugin PoCでallowイベントが出る

4) ドキュメントと例の整理
   - 目標: 例の最小集合化（param/非param/RO/WO/HH/Hの代表）、手順の簡潔化
   - タスク:
     - examples/: 重複の削減、README（実行コマンド付き）
     - phase_10_9/10_10 のガイドをCURRENT_TASKと相互参照
   - 受入: 主要ケースが examples/README からそのまま実行可

5) ベンチと回帰（最小）
   - 目標: ラインの性能/退行の早期検知
   - タスク:
     - ny_bench.hako のケース整理（関数呼出/Map set-get/branch）
     - compare: VM vs JIT（ウォームアップ付き）
   - 受入: ベンチ出力に JIT/VM の比較が出る（改善/退行が見える）

## リスクと対策
- param/非param 分岐の混乱: イベントに reason を必ず出す／docsにベストプラクティス（受け手をparam化）
- mutatingの誤許可: JitPolicyBox の whitelist/プリセットのみで許可、既定はread_only
- 署名の散逸: canonical id（例: nyash.map.get_h）と派生（_hh）の方針を明示

## 受け入れ基準（サマリ）
- DebugConfig/Box/CLIの一貫挙動（apply後の即時反映）
- GC切替とバリアサイト観測が可能
- HostCall（RO/一部WO）が param でallow、非paramでfallback（イベントで確認可）
- 代表サンプルが examples/README の手順で成功

## すぐ試せるコマンド（抜粋）
```bash
# math.min（関数スタイル）
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_NATIVE_F64=1 NYASH_JIT_EVENTS=1 \
  ./target/release/nyash --backend vm examples/jit_math_function_style_min_float.hako

# Map.get HH直実行
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 NYASH_JIT_EVENTS=1 \
  ./target/release/nyash --backend vm examples/jit_map_get_param_hh.hako

# Mutating opt-in（Array.push）
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 NYASH_JIT_EVENTS=1 \
  ./target/release/nyash --backend vm examples/jit_policy_optin_mutating.hako

## 例とスモーク（開発者向けクイック）
- 例一覧: `examples/README.md`（HH直実行・mutating opt-in・GCデモ）
- スモーク: `bash tools/smoke_phase_10_10.sh`
- JITイベント最小スキーマ: `docs/reference/jit/jit_events_json_v0_1.md`

### Quick Note（運用の勘所）
- phase分離: compile→`phase:"lower"`（opt-in）, runtime→`phase:"execute"`（既定ON可）
- しきい値: 観測ONかつ未指定なら `NYASH_JIT_THRESHOLD=1`（Runner/DebugConfigが補助）
- HostCall: 実例では `NYASH_JIT_HOSTCALL=1` を明示（HH直実行/ANYヘルパ）
- ANYヘルパ: `nyash.any.length_h / is_empty_h` でROは十分カバー（追加不要）
```
Status: Historical
