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:
@ -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_* を追加(opt‑in)。配列ネスト/境界ケースを含む。
|
||||
- [x] ドキュメント更新(README/PLAN/CHECKLIST)。
|
||||
|
||||
-— 未完(本フェーズ内で進める) —
|
||||
- [x] Gate‑C(Core) v1→MIR Interpreter 実行(`HAKO_NYVM_CORE=1`/最小ブリッジ)。
|
||||
- [ ] NyVmDispatcher 直行(別タスク・将来対応)。
|
||||
- [ ] v1→v0 最小ダウングレード(任意・`HAKO_NYVM_V1_DOWNCONVERT=1`)。未対応命令は Fail‑Fast。
|
||||
- [x] Bridge 正規化: `HAKO_BRIDGE_INJECT_SINGLETON` 実装(Array/Map len → Method 化、Fail‑Fast 付き)。
|
||||
- [x] Bridge 正規化: `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` 実装(φ をブロック先頭へ移動、順序保護)。
|
||||
- [x] Gate‑C file/pipe × Plugins ON/OFF の対称性スモーク(数値出力=終了コード)。
|
||||
- [ ] Stage‑A map リテラルの堅牢化(エスケープ/Unicode/{}/不正形診断)。
|
||||
- [x] スモーク実行権限(core/* に chmod +x 反映)。
|
||||
- [ ] 参照の古い表記整理(apps/selfhost-compiler → lang/src/compiler/* に統一。履歴注記は残す)。
|
||||
- [ ] ランナー子環境ヘルパーの集約(selfhost 経路の ENV を helper へ)。
|
||||
- [ ] Extern SSOT(VM/AOT 共通ローダ、既定OFF)。
|
||||
|
||||
▼ 付記(ワークログ)
|
||||
- 2025‑11‑01: Runner の Gate‑C v1 直行(子プロセスで Hako controller 起動)を配線。ただし Hako 側で `call("…")` 解決に失敗→直行NG。v1→MIR Interpreter(最小ブリッジ const/copy/ret)は動作。
|
||||
- 2025‑11‑01: Bridge トグル(len 変換/φ 先頭化)実装。Gate‑C v1 parity スモーク(file/pipe、plugins ON/OFF)と Stage‑A map 境界スモークを追加(opt‑in)。
|
||||
|
||||
@ -23,6 +23,21 @@
|
||||
5) ドキュメント更新
|
||||
- README/PLAN/CHECKLIST を適宜更新。CI 既定は変更せず(既定OFF)。
|
||||
|
||||
6) Gate‑C(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 へ降格。未対応は Fail‑Fast。
|
||||
|
||||
実装ノート(現時点)
|
||||
- Runner→Ny 側の Gate‑C 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 指定形)して use‑before‑def を防止。
|
||||
- いずれも既定OFF、明示トグルでのみ有効。
|
||||
|
||||
## トグル/フラグ(dev)
|
||||
- `--stage-b`(entry 直下で Stage‑B パスを有効化)
|
||||
- オプション:`--prefer-cfg {0|1|2}`(未指定は 1)
|
||||
|
||||
@ -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 ブリッジ)
|
||||
|
||||
---
|
||||
|
||||
不足機能(現状のギャップ)
|
||||
- Gate‑C(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` で opt‑in。
|
||||
- 未対応命令は Fail‑Fast。Core 直行が有効な場合は直行を優先。
|
||||
|
||||
- Bridge 正規化トグルの中身が未実装
|
||||
- `HAKO_BRIDGE_INJECT_SINGLETON` / `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` は env のみ存在。実際の補完・整列は未実装。
|
||||
- 仕様確定後に JSON 編集(受信モジュール内の命令配列へ最小差分)を実装する。
|
||||
|
||||
Bridge 正規化 仕様(案/このフェーズで凍結)
|
||||
- 目的: Gate‑C(Wrapper) 経路で v1 形状の JSON を安全に Core/VM で実行可能な形に最小正規化する。
|
||||
- トグル(既定OFF・Fail‑Fast優先)
|
||||
- `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`)
|
||||
- 対象: ブロック内で φ 命令が先頭以外に出現する形、または φ と非φ が交差している形。
|
||||
- 変換(最小):
|
||||
- 同一ブロック内で φ 命令列を先頭に移動(相対順は保持)。
|
||||
- 非φ 命令列は元順序を保持する(use‑before‑def を避けるための再順序付けは行わない)。
|
||||
- 追加のコピー挿入(edge copy 合成)は行わない。必要なら Fail。
|
||||
- 失敗時: 安定化したエラーメッセージで Fail‑Fast(静かなフォールバック禁止)。
|
||||
|
||||
注: 上記はいずれも「既定OFF」。Runner での v1 受理は 1) 直行(NyVmDispatcher/Core) 2) 最小ダウングレード(v1→v0, 任意)の順で選好し、Bridge 正規化は Wrapper 経路の補助として段階導入する。
|
||||
|
||||
- Gate‑C(file/pipe)× Plugins ON/OFF の対称性検証が未整備
|
||||
- 数値出力とプロセス終了コードの一致(rc=出力数値)の保証スモークを追加する。
|
||||
|
||||
- Stage‑A map リテラルの堅牢化の残り
|
||||
- エスケープや Unicode、空マップ `{}`、不正形(診断)などの追加ケースを補強する。
|
||||
|
||||
- スモーク実行権限の不足
|
||||
- 一部 `tools/smokes/v2/profiles/quick/core/*.sh` が実行不可のまま。chmod +x を反映する。
|
||||
|
||||
- 参照の古い表記が残存
|
||||
- hako.toml のコメントや docs に `apps/selfhost-compiler` の表記が散見。`lang/src/compiler/*` 基準に置換(履歴の文脈が必要な箇所は注記)。
|
||||
|
||||
- ランナー子環境ヘルパーの集約が未完
|
||||
- selfhost 子プロセス向け ENV セットの重複を helper に寄せるタスクが残り。
|
||||
|
||||
- Extern SSOT(VM/AOT 共有ローダ)が未導入(最小)
|
||||
- VM/AOT 双方で参照する単一起点を用意(既定OFF、opt‑in)。
|
||||
|
||||
このフェーズの次アクション(短期)
|
||||
- Gate‑C 実行切替(v1直行/トグル配下)と対称性スモークの追加。
|
||||
- Bridge トグルの実装方針を SPEC 化(Singleton 注入ルール / φ 整列の期待形)。
|
||||
- スモークの権限整備と Stage‑A/Stage‑B の追加境界ケース投入。
|
||||
|
||||
現状ステータス(2025‑11‑01 更新)
|
||||
- Gate‑C 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 へ降格(Fail‑Fast)。
|
||||
- Bridge トグル:
|
||||
- `INJECT_SINGLETON`/`EARLY_PHI_MATERIALIZE` を実装(既定OFF)。Array/Map len 変換と φ 先頭化のみ対応済み。未対応は Fail。
|
||||
- スモーク:
|
||||
- Gate‑C v1 parity(file/pipe × plugins ON/OFF)の opt‑in スモーク(`SMOKES_ENABLE_GATE_C_V1=1`)。
|
||||
- Stage‑A map 境界(エスケープ/Unicode/空)スモーク追加(診断含め PASS)。
|
||||
|
||||
直近のフォロー
|
||||
- 変換器は最小命令セットのみ対応(mir_call/extern 等は Fail)。対応範囲を広げる場合は json_v1_bridge に実装を追加。
|
||||
|
||||
Reference in New Issue
Block a user