Files
hakorune/docs/phases/phase-10/phase_10_10

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/Boundary10.9-β/δ完了)
  • JITイベント: NYASH_JIT_EVENTS=1 時に threshold=1 自動適用でLower確実実行
  • 戻り境界: CallBoundaryBox で JitValue→VMValue を一元化(ハンドル復元含む)

ワークストリーム

  1. GC Switchable Runtimephase_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 Systemphase_10_8_unified_debug_system.md

    • 目標: デバッグ/観測フラグを DebugConfig/Box に統合CLI/env/Boxの単一路
    • タスク:
      • DebugConfigRust側: 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.nyash のケース整理(関数呼出/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切替とバリアサイト観測が可能
  • HostCallRO/一部WOが param でallow、非paramでfallbackイベントで確認可
  • 代表サンプルが examples/README の手順で成功

すぐ試せるコマンド(抜粋)

# 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.nyash

# 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.nyash

# Mutating opt-inArray.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.nyash

## 例とスモーク(開発者向けクイック)
- 例一覧: `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は十分カバー追加不要