- 4つ目の実行方式としてAOT(Ahead-of-Time)コンパイルを文書化 - MIR→WASM→.cwasm のコンパイルパイプラインを説明 - wasm-backend featureでのビルド方法を明記 - 現在の実装状況(完全なスタンドアロン実行ファイルはTODO)を記載 - CLAUDE.mdのWASM説明も3種類(Rust→WASM、Nyash→WASM、Nyash→AOT)に更新 - CURRENT_TASK.mdにPhase 10.9/10.10の完了項目を追加 ChatGPT5さんのAOT試行に対応した適切なドキュメント配置を実施 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
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 を一元化(ハンドル復元含む)
ワークストリーム
-
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書き込みでバリアサイトが加算される
-
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が指定先に出力
-
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イベントが出る
-
ドキュメントと例の整理
- 目標: 例の最小集合化(param/非param/RO/WO/HH/Hの代表)、手順の簡潔化
- タスク:
- examples/: 重複の削減、README(実行コマンド付き)
- phase_10_9/10_10 のガイドをCURRENT_TASKと相互参照
- 受入: 主要ケースが examples/README からそのまま実行可
-
ベンチと回帰(最小)
- 目標: ラインの性能/退行の早期検知
- タスク:
- 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切替とバリアサイト観測が可能
- HostCall(RO/一部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-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.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は十分カバー(追加不要)