docs: clarify static box method arity (implicit self) and plan fix in Phase 20.33; expand Bridge singleton injection spec; update checklist
This commit is contained in:
@ -14,6 +14,7 @@
|
|||||||
- [ ] v1→v0 最小ダウングレード(任意・`HAKO_NYVM_V1_DOWNCONVERT=1`)。未対応命令は Fail‑Fast。
|
- [ ] 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_INJECT_SINGLETON` 実装(Array/Map len → Method 化、Fail‑Fast 付き)。
|
||||||
- [x] Bridge 正規化: `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` 実装(φ をブロック先頭へ移動、順序保護)。
|
- [x] Bridge 正規化: `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` 実装(φ をブロック先頭へ移動、順序保護)。
|
||||||
|
- [ ] 静的Boxメソッドの self 先頭統一(LLVM 命令Boxを含む)。互換が必要な経路は `HAKO_BRIDGE_INJECT_SINGLETON=1` で補完。
|
||||||
- [x] Gate‑C file/pipe × Plugins ON/OFF の対称性スモーク(数値出力=終了コード)。
|
- [x] Gate‑C file/pipe × Plugins ON/OFF の対称性スモーク(数値出力=終了コード)。
|
||||||
- [ ] Stage‑A map リテラルの堅牢化(エスケープ/Unicode/{}/不正形診断)。
|
- [ ] Stage‑A map リテラルの堅牢化(エスケープ/Unicode/{}/不正形診断)。
|
||||||
- [x] スモーク実行権限(core/* に chmod +x 反映)。
|
- [x] スモーク実行権限(core/* に chmod +x 反映)。
|
||||||
|
|||||||
@ -68,6 +68,12 @@
|
|||||||
- 現状: `HAKO_NYVM_CORE=1` 時に v1(JSON) を `json_v1_bridge` で `MirModule` へ変換し、MIR Interpreter で実行(const/binop/compare/branch/jump/phi 対応)。
|
- 現状: `HAKO_NYVM_CORE=1` 時に v1(JSON) を `json_v1_bridge` で `MirModule` へ変換し、MIR Interpreter で実行(const/binop/compare/branch/jump/phi 対応)。
|
||||||
- NyVmDispatcher 直行は別タスクとして扱う(既定OFF・将来対応)。
|
- NyVmDispatcher 直行は別タスクとして扱う(既定OFF・将来対応)。
|
||||||
|
|
||||||
|
- 静的Boxの Singleton(self)規約の明文化と整備
|
||||||
|
- 背景: 静的Boxのメソッドは「先頭に self(Singleton)を持つ」前提。MIR/Verifier もこの arity を期待する。
|
||||||
|
- 現状: 一部の LLVM 命令Box相当(例: `LLVMPhiInstructionBox.lower_phi` 等)が self 非対応の設計で呼び出されるケースがあり、Verifier が「Singleton+引数…」の期待と不一致になる。
|
||||||
|
- 対応: 本フェーズで「メソッド定義側を self 先頭に揃える」ことを原則とし、互換が必要な経路には `HAKO_BRIDGE_INJECT_SINGLETON=1`(opt-in)で受理・補完する。
|
||||||
|
- Fail‑Fast: 期待 arity と不一致の呼び出しは静かなフォールバックを行わず、安定化メッセージで失敗させる。
|
||||||
|
|
||||||
- v1→v0 ダウングレード(Runner 側)が未実装(任意)
|
- v1→v0 ダウングレード(Runner 側)が未実装(任意)
|
||||||
- 代表命令(const/binop/compare/ret/branch/jump/phi)の最小降格を `HAKO_NYVM_V1_DOWNCONVERT=1` で opt‑in。
|
- 代表命令(const/binop/compare/ret/branch/jump/phi)の最小降格を `HAKO_NYVM_V1_DOWNCONVERT=1` で opt‑in。
|
||||||
- 未対応命令は Fail‑Fast。Core 直行が有効な場合は直行を優先。
|
- 未対応命令は Fail‑Fast。Core 直行が有効な場合は直行を優先。
|
||||||
@ -84,6 +90,8 @@ Bridge 正規化 仕様(案/このフェーズで凍結)
|
|||||||
- 変換(最小):
|
- 変換(最小):
|
||||||
- 形状: `ModuleFunction { name: "ArrayBox.len" , args:[X] }` → `Method { receiver:X, method:"size" }`
|
- 形状: `ModuleFunction { name: "ArrayBox.len" , args:[X] }` → `Method { receiver:X, method:"size" }`
|
||||||
- 形状: `ModuleFunction { name: "MapBox.len" , args:[X] }` → `Method { receiver:X, method:"len" }`
|
- 形状: `ModuleFunction { name: "MapBox.len" , args:[X] }` → `Method { receiver:X, method:"len" }`
|
||||||
|
- 形状: `ModuleFunction { name: "LLVMPhiInstructionBox.lower_phi", args:[dst,incoming] }`
|
||||||
|
→ `Method { receiver:Singleton(LLVMPhiInstructionBox), method:"lower_phi", args:[dst,incoming] }`(将来の静的Box命令群に一般化)
|
||||||
- 前提: `args` が 1 要素の数値(レジスタID)。それ以外は変換せず Fail。
|
- 前提: `args` が 1 要素の数値(レジスタID)。それ以外は変換せず Fail。
|
||||||
- 変換は命令 JSON の当該オブジェクトのみを書き換え、周囲の命令順や値定義順には触れない。
|
- 変換は命令 JSON の当該オブジェクトのみを書き換え、周囲の命令順や値定義順には触れない。
|
||||||
- 未対応: push/pop/get/set の ModuleFunction 形(将来拡張)。
|
- 未対応: push/pop/get/set の ModuleFunction 形(将来拡張)。
|
||||||
|
|||||||
@ -132,6 +132,12 @@ static box Main {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
注意(静的Boxのメソッド引数規約)
|
||||||
|
- 静的Boxのメソッドは先頭に暗黙の `self`(= Singleton)が存在する。
|
||||||
|
- つまり呼び出し側は `Main.main()` のように書いても、意味論上は `Main.main(self, ...)` の形になる。
|
||||||
|
- VM/MIR/LLVM いずれのバックエンドでも、この規約に基づき引数個数(arity)を判定する。
|
||||||
|
- 開発時のガイドライン: 静的Box内に定義する全メソッドは「先頭に `self` を取る」形で設計すること(将来の最適化や検証で一貫性を保つため)。
|
||||||
|
|
||||||
### **2.2 変数宣言**
|
### **2.2 変数宣言**
|
||||||
|
|
||||||
#### **基本パターン**
|
#### **基本パターン**
|
||||||
|
|||||||
Reference in New Issue
Block a user