phase(9.78h): stabilize MIR/VM pipeline

- Add MIR26 doc≡code sync test (tests/mir_instruction_set_sync.rs)
- Quiet snapshots; filter plugin/net logs; golden all green
- Delegate VM phi selection to LoopExecutor (borrow-safe)
- ResultBox migration: remove legacy box_trait::ResultBox paths
- VM BoxRef arithmetic fallbacks via toString().parse::<i64>()
- Bridge BoxCall(InstanceBox) to Class.method/arity in VM
- Fix Effects purity (READ -> readonly, not pure)
- Mark Catch as CONTROL to prevent DCE; Try/Catch test green
- Add env-gated debug logs (effects, verifier, mir-printer, trycatch, ref, bin)
- Update CURRENT_TASK with progress and next steps
This commit is contained in:
Moe Charm
2025-08-26 05:49:23 +09:00
parent 248c3ba183
commit bf4b87526e
21 changed files with 310 additions and 95 deletions

View File

@ -1,4 +1,4 @@
# 🎯 CURRENT TASK - 2025年8月25日(状況整理)
# 🎯 CURRENT TASK - 2025年8月26日(状況整理&再起動ショートカット
## ⏱️ 再開ショートカット(今日のフォーカス)
- フォーカス: VM比較経路の安定化後片付け + 1000行分解の下準備
@ -36,6 +36,14 @@ nyash --backend vm local_tests/and_or_truthy_vm.nyash # 期待: false,true,fals
- 9.79P2P本体 前提: 9.78h完了): `docs/development/roadmap/phases/phase-9/phase_9_79_p2pbox_rebuild.md`
- Phase 10Cranelift JIT主経路: `docs/development/roadmap/phases/phase-10/phase_10_cranelift_jit_backend.md`
### 🧩 今日の再開ポイント2025-08-26
- 完了(適度な分解): runnerを`modes/`へ分離mir/vm/llvm/bench/wasm/aot/common、objectsを`objects/{ops,methods,fields}.rs`へ、VMに`frame.rs`/`control_flow::record_transition`/`dispatch::execute_instruction`導入。ログ抑制NYASH_VM_DEBUG_* / NYASH_CLI_VERBOSE / NYASH_DEBUG_PLUGIN、Phi正規化Step1previous_block基準
- 次アクション(小さく前進):
1) MIR26命令「総数一致」チェックコード≡ドキュメント
2) Loop SSA Step2seal/pred更新のスケルトンVerifierのphi系文言強化
3) 代表スナップショット再確認TypeOp/extern_call/loop/await/boxcall
- クイックコマンド: `cargo build --release -j32``nyash --backend vm local_tests/compare_box_vm.nyash``./tools/ci_check_golden.sh`
## 🚨 現在の状況2025-08-25
@ -418,3 +426,41 @@ NYASH_VM_DEBUG_BOXCALL=1 ./target/release/nyash --backend vm local_tests/test_vm
- Optimizer: 未lowering検知is/as/isType/asTypeをBoxCall/Call両経路で検出、`NYASH_OPT_DIAG_FAIL=1` と連携。
- 代表スナップショット: extern_call/loop/boxcall/typeop_mixed をCIに追加、全件緑。
- 注: WeakRef/Barrier の“統合”はPoCフラグで切替可能レガシー命令も支援—MIR26はドキュメントの正典、実装は互換を維持。
## ✅ 本日の成果9.78h
- MIR26命令のコード≡ドキュメント同期テストを追加tests/mir_instruction_set_sync.rs→ 緑
- スナップショット安定化tools/snapshot_mir.sh に静音フィルタ、golden全緑
- Phi選択の委譲スケルトンをVMへ実装LoopExecutor::execute_phi
- ResultBox移行スイープVMのレガシーbox_trait::ResultBox経路を削除、boxes::ResultBoxに統一
- VM BoxRef演算フォールバック拡張toString→parse<i64>、比較/四則/混在を広くカバー)
- ロガー導入環境変数ONでのみ出力:
- NYASH_DEBUG_EFFECTS / NYASH_DEBUG_VERIFIER / NYASH_DEBUG_MIR_PRINTER / NYASH_DEBUG_TRYCATCH
- NYASH_VM_DEBUG_REF / NYASH_VM_DEBUG_BIN / 既存の NYASH_VM_DEBUG_* 系
- VMユーザBoxのBoxCallをInstance関数へ橋渡しInstanceBox → Class.method/arity へ委譲)
## 🧪 テスト概況(要点)
- 緑: 175件 / 赤: 1件`mir::verification::tests::test_if_merge_uses_phi_not_predecessor`
- 失敗要旨: Mergeブロックで前任値使用と判定DominatorViolation/MergeUsesPredecessorValue
- 生成MIRCLI/Builderはmergeにphiを含むため、Verifier側の検査条件かvariable_map束縛の拾い漏れの可能性。
### デバッグ用コマンドログON例
```bash
# Effects純度
NYASH_DEBUG_EFFECTS=1 cargo test --lib mir::effect::tests::test_effect_mask_creation -- --nocapture
# Verifierphi/merge
NYASH_DEBUG_VERIFIER=1 cargo test --lib mir::verification::tests::test_if_merge_uses_phi_not_predecessor -- --nocapture
# Try/CatchのLowering/Printer
NYASH_DEBUG_TRYCATCH=1 NYASH_DEBUG_MIR_PRINTER=1 cargo test --lib mir::tests::test_try_catch_compilation -- --nocapture
# VM 参照/演算
NYASH_VM_DEBUG_REF=1 cargo test --lib backend::vm::tests::test_vm_user_box_birth_and_method -- --nocapture
NYASH_VM_DEBUG_BIN=1 cargo test --lib tests::mir_vm_poc::test_boxref_arith -- --nocapture
```
## 🎯 次の着手残1の精密駆逐
1) Verifierのmerge-phi検査を補強phi dst/variable束縛の対応づけ強化 or 条件緩和の適用)
2) Builderのvariable_map束縛拾い漏れがあれば補修Program直下パターンの明示
3) 代表MIRダンプをfixture化して回帰チェックphi存在の有無を機械判定