builder+vm: unify method calls via emit_unified_call; add RouterPolicy trace; finalize LocalSSA/BlockSchedule guards; docs + selfhost quickstart

- Unify standard method calls to emit_unified_call; route via RouterPolicy and apply rewrite::{special,known} at a single entry.\n- Stabilize emit-time invariants: LocalSSA finalize + BlockSchedule PHI→Copy→Call ordering; metadata propagation on copies.\n- Known rewrite default ON (userbox only, strict guards) with opt-out flag NYASH_REWRITE_KNOWN_DEFAULT=0.\n- Expand TypeAnnotation whitelist (is_digit_char/is_hex_digit_char/is_alpha_char/Map.has).\n- Docs: unified-method-resolution design note; Quick Reference normalization note; selfhosting/quickstart.\n- Tools: add tools/selfhost_smoke.sh (dev-only).\n- Keep behavior unchanged for Unknown/core/user-instance via BoxCall fallback; all tests green (quick/integration).
This commit is contained in:
nyash-codex
2025-09-28 20:38:09 +09:00
parent e442e5f612
commit dd65cf7e4c
60 changed files with 2523 additions and 471 deletions

View File

@ -38,7 +38,7 @@ Unified Call開発既定ON
4) NYABIVM Kernel Bridge下地未配線・既定OFF
- docs/abi/vm-kernel.md関数: caps()/policy.*()/resolve_method_batch()
- スケルトン: apps/selfhost/vm/boxes/vm_kernel_box.nyashpolicy スタブ)
- 既定OFFトグル予約: NYASH_VM_NY_KERNEL, *_TIMEOUT_MS, *_TRACE
- 既定OFFトグル予約: NYASH_VM_NY_KERNEL, *_TIMEOUT_MS, *_TRACE
非スコープ(やらない)
- 既定挙動の変更Rust VM/LLVMが主軸のまま
@ -88,3 +88,44 @@ Unified Call開発既定ON
更新履歴
- 20250928 v2本書: Known 化Rewrite 統合dev観測、表示API `str()` 統一、MiniVM 安定化へ焦点を再定義
- 20250928 初版: MiniVM M3 + NYABI下地の計画
## ステータス20250928 仕上げメモ)
- M3compare/branch/jump: MiniVMMirVmMinが厳密セグメントの単一パスで動作。代表 JSON 断片で compare(Eq)→ret、branch、jump を評価。
- 統合スモーク: integration プロファイルLLVM/llvmliteは PASS 17/17全緑
- ルータ/順序ガード(仕様不変):
- Router: 受信者クラスが Unknown のメソッド呼び出しは常にレガシー BoxCall にフォールバック安定性優先・常時ON
- BlockSchedule: φ→Copy(materialize)→本体(Call) の順序を devonly で検証(`NYASH_BLOCK_SCHEDULE_VERIFY=1`)。
- LocalSSA: 受信者・引数・条件・フィールド基底を emit 直前で「現在のブロック内」に必ず定義。
- VM 寛容フラグの方針:
- `NYASH_VM_TOLERATE_VOID`: dev 時の救済専用quick テストからは除去)。
- Router の Unknown→BoxCall は常時ON仕様不変・安定化目的
## 次のTODO短期
- json_query_vmVM: LocalSSA/順序の取りこぼしを補強し、SKIP を解除。
- ループ PHI 搬送: ループ header/合流での搬送を最小補強し、break/continue/loop_statement の SKIP を解除。
- MiniVM M2/M3: 単一パス化の仕上げ境界厳密化の再確認後、代表4件m2_eq_true/false, m3_branch_true, m3_jumpを PASS → SKIP 解除。
## Builder 小箱Box 化)方針(仕様不変・段階導入)
- S-tier導入:
- MetadataPropagationBox型/起源伝播): `metadata/propagate.rs`
- ConstantEmissionBoxConst発行: `emission/constant.rs`
- TypeAnnotationBox最小型注釈: `types/annotation.rs`
- RouterPolicyBoxUnified vs BoxCall ルート): `router/policy.rs`
- EmitGuardBoxemit直前の最終関所: `emit_guard/mod.rs`
- NameConstBox関数名Const生成: `name_const.rs`
- A/B-tier計画:
- Compare/BranchEmissionBox、PhiWiringBox、EffectMask/TypeInferenceBoxPhase16以降
採用順(小さく安全に)
1) Const → metadata → 最小注釈の順に薄く差し替え(代表箇所→全体)
2) RouterPolicyBox を統一Call経路に導入utils側は後段で移行
3) EmitGuardBox で Call 周辺の finalize/verify を集約Branch/Compare は後段)
4) NameConstBox を rewrite/special/known に段階適用
ドキュメント
- 詳細は `docs/development/builder/BOXES.md` を参照。
## Unskip Plan段階復帰
- P0: json_query_vm → 期待出力一致、寛容フラグ不要。
- P1: loopsbreak/continue/loop_statement→ PHI 搬送安定。
- P2: MiniVMM2/M3→ 代表4件 PASS、coarse 撤去・単一パス維持。