docs(phase-20.33): update Gate-C(Core) status (v1→MIR interpreter), mark parity smokes done; clean up wording\nchore: remove unused bak/ (external backup kept)\nsmokes: add Gate-C v1 file/pipe opt-in canaries; env toggles documented\nrunner: include json_v1_bridge + bridge toggles (singleton/phi) wiring

This commit is contained in:
nyash-codex
2025-11-01 07:02:04 +09:00
parent cac22c1a87
commit eabeb69d77
12 changed files with 930 additions and 11 deletions

View File

@ -7,3 +7,20 @@
- [x] v1→v0 降格MirJsonV1Adapter経路を整備`--v1-compat` / `selfhost_stageb_v1_compat_vm` opt-in
- [x] tools/smokes/v2/profiles/quick/core/selfhost_* を追加optin。配列ネスト/境界ケースを含む。
- [x] ドキュメント更新README/PLAN/CHECKLIST
-— 未完(本フェーズ内で進める) —
- [x] GateC(Core) v1→MIR Interpreter 実行(`HAKO_NYVM_CORE=1`/最小ブリッジ)。
- [ ] NyVmDispatcher 直行(別タスク・将来対応)。
- [ ] v1→v0 最小ダウングレード(任意・`HAKO_NYVM_V1_DOWNCONVERT=1`)。未対応命令は FailFast。
- [x] Bridge 正規化: `HAKO_BRIDGE_INJECT_SINGLETON` 実装Array/Map len → Method 化、FailFast 付き)。
- [x] Bridge 正規化: `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` 実装(φ をブロック先頭へ移動、順序保護)。
- [x] GateC file/pipe × Plugins ON/OFF の対称性スモーク(数値出力=終了コード)。
- [ ] StageA map リテラルの堅牢化(エスケープ/Unicode/{}/不正形診断)。
- [x] スモーク実行権限core/* に chmod +x 反映)。
- [ ] 参照の古い表記整理apps/selfhost-compiler → lang/src/compiler/* に統一。履歴注記は残す)。
- [ ] ランナー子環境ヘルパーの集約selfhost 経路の ENV を helper へ)。
- [ ] Extern SSOTVM/AOT 共通ローダ、既定OFF
▼ 付記(ワークログ)
- 20251101: Runner の GateC v1 直行(子プロセスで Hako controller 起動)を配線。ただし Hako 側で `call("…")` 解決に失敗→直行NG。v1→MIR Interpreter最小ブリッジ const/copy/retは動作。
- 20251101: Bridge トグルlen 変換/φ 先頭化実装。GateC v1 parity スモークfile/pipe、plugins ON/OFFと StageA map 境界スモークを追加optin

View File

@ -23,6 +23,21 @@
5) ドキュメント更新
- README/PLAN/CHECKLIST を適宜更新。CI 既定は変更せず既定OFF
6) GateC(Core) 実行切替短期緑化・既定OFF
- `HAKO_NYVM_CORE=1` 時のみ有効。
- 入力 JSON 判定: `schema_version` を含む v1 は NyVmDispatcher 直行、`version:0` は従来の v0 ブリッジ。
- 代替(任意): `HAKO_NYVM_V1_DOWNCONVERT=1` で最小サブセットconst/binop/compare/ret/branch/jump/phiを v0 へ降格。未対応は FailFast。
実装ノート(現時点)
- Runner→Ny 側の GateC controller 呼び出しは子プロセスで実装payload を env 経由で受け渡し、Quiet 環境を注入)。
- 既知の問題: Hako controller が `call("…")` 解決に失敗し実行不可。直行は一時的に失敗→v0 ブリッジ側がエラーを出す。
- 次の修正: controller 側で include 経由の直接呼び出しに変更するか、runner 側で JSON→Core のインライン実行を採用する(小差分優先)。
7) Bridge 正規化トグル実装(仕様確定後)
- `HAKO_BRIDGE_INJECT_SINGLETON`: Array/Map 系の静的関数に必要な receiver/Singleton 補完を最小差分で注入。
- `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE`: φ をブロック先頭へ整列or 指定形)して usebeforedef を防止。
- いずれも既定OFF、明示トグルでのみ有効。
## トグル/フラグdev
- `--stage-b`entry 直下で StageB パスを有効化)
- オプション:`--prefer-cfg {0|1|2}`(未指定は 1

View File

@ -60,3 +60,77 @@
- lang/src/compiler/entry/compiler.hako入口
- lang/src/shared/json/mir_v1_adapter.hako
- src/runner/json_v0_bridge/*Rust 側 v0 ブリッジ)
---
不足機能(現状のギャップ)
- GateC(Core) v1 経路は実装済みMIR Interpreter 直行)
- 現状: `HAKO_NYVM_CORE=1` 時に v1(JSON) を `json_v1_bridge``MirModule` へ変換し、MIR Interpreter で実行const/binop/compare/branch/jump/phi 対応)。
- NyVmDispatcher 直行は別タスクとして扱う既定OFF・将来対応
- v1→v0 ダウングレードRunner 側)が未実装(任意)
- 代表命令const/binop/compare/ret/branch/jump/phiの最小降格を `HAKO_NYVM_V1_DOWNCONVERT=1` で optin。
- 未対応命令は FailFast。Core 直行が有効な場合は直行を優先。
- Bridge 正規化トグルの中身が未実装
- `HAKO_BRIDGE_INJECT_SINGLETON` / `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` は env のみ存在。実際の補完・整列は未実装。
- 仕様確定後に JSON 編集(受信モジュール内の命令配列へ最小差分)を実装する。
Bridge 正規化 仕様(案/このフェーズで凍結)
- 目的: GateC(Wrapper) 経路で v1 形状の JSON を安全に Core/VM で実行可能な形に最小正規化する。
- トグル既定OFF・FailFast優先
- `HAKO_BRIDGE_INJECT_SINGLETON`alias `NYASH_BRIDGE_INJECT_SINGLETON`
- 対象: ModuleFunction/Method で receiver が明示されない「静的呼び出し風」の形。
- 変換(最小):
- 形状: `ModuleFunction { name: "ArrayBox.len" , args:[X] }``Method { receiver:X, method:"size" }`
- 形状: `ModuleFunction { name: "MapBox.len" , args:[X] }``Method { receiver:X, method:"len" }`
- 前提: `args` が 1 要素の数値レジスタID。それ以外は変換せず Fail。
- 変換は命令 JSON の当該オブジェクトのみを書き換え、周囲の命令順や値定義順には触れない。
- 未対応: push/pop/get/set の ModuleFunction 形(将来拡張)。
- `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE`alias `NYASH_BRIDGE_EARLY_PHI_MATERIALIZE`
- 対象: ブロック内で φ 命令が先頭以外に出現する形、または φ と非φ が交差している形。
- 変換(最小):
- 同一ブロック内で φ 命令列を先頭に移動(相対順は保持)。
- 非φ 命令列は元順序を保持するusebeforedef を避けるための再順序付けは行わない)。
- 追加のコピー挿入edge copy 合成)は行わない。必要なら Fail。
- 失敗時: 安定化したエラーメッセージで FailFast静かなフォールバック禁止
注: 上記はいずれも「既定OFF」。Runner での v1 受理は 1) 直行NyVmDispatcher/Core 2) 最小ダウングレードv1→v0, 任意の順で選好し、Bridge 正規化は Wrapper 経路の補助として段階導入する。
- GateCfile/pipe× Plugins ON/OFF の対称性検証が未整備
- 数値出力とプロセス終了コードの一致rc=出力数値)の保証スモークを追加する。
- StageA map リテラルの堅牢化の残り
- エスケープや Unicode、空マップ `{}`、不正形(診断)などの追加ケースを補強する。
- スモーク実行権限の不足
- 一部 `tools/smokes/v2/profiles/quick/core/*.sh` が実行不可のまま。chmod +x を反映する。
- 参照の古い表記が残存
- hako.toml のコメントや docs に `apps/selfhost-compiler` の表記が散見。`lang/src/compiler/*` 基準に置換(履歴の文脈が必要な箇所は注記)。
- ランナー子環境ヘルパーの集約が未完
- selfhost 子プロセス向け ENV セットの重複を helper に寄せるタスクが残り。
- Extern SSOTVM/AOT 共有ローダ)が未導入(最小)
- VM/AOT 双方で参照する単一起点を用意既定OFF、optin
このフェーズの次アクション(短期)
- GateC 実行切替v1直行/トグル配下)と対称性スモークの追加。
- Bridge トグルの実装方針を SPEC 化Singleton 注入ルール / φ 整列の期待形)。
- スモークの権限整備と StageA/StageB の追加境界ケース投入。
現状ステータス20251101 更新)
- GateC v1 経路:
- Runner 側で `HAKO_NYVM_CORE=1` / `NYASH_NYVM_CORE=1` を検知すると、v1(JSON) を Rust の `json_v1_bridge``MirModule` に変換し、MIR Interpreter で直接実行する経路が完成const/binop/compare/branch/jump/phi 対応)。
- 子プロセス経路は撤退(`call` 依存なし)。
- v1→v0 ダウングレード:
- `HAKO_NYVM_V1_DOWNCONVERT=1`alias `NYASH_NYVM_V1_DOWNCONVERT`で同じコンバータを使用し、v1 JSON を MIR Interpreter へ降格FailFast
- Bridge トグル:
- `INJECT_SINGLETON`/`EARLY_PHI_MATERIALIZE` を実装既定OFF。Array/Map len 変換と φ 先頭化のみ対応済み。未対応は Fail。
- スモーク:
- GateC v1 parityfile/pipe × plugins ON/OFFの optin スモーク(`SMOKES_ENABLE_GATE_C_V1=1`)。
- StageA map 境界(エスケープ/Unicode/空)スモーク追加(診断含め PASS
直近のフォロー
- 変換器は最小命令セットのみ対応mir_call/extern 等は Fail。対応範囲を広げる場合は json_v1_bridge に実装を追加。