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:
nyash-codex
2025-11-01 07:07:29 +09:00
parent eabeb69d77
commit a87ea2636c
3 changed files with 15 additions and 0 deletions

View File

@ -14,6 +14,7 @@
- [ ] v1→v0 最小ダウングレード(任意・`HAKO_NYVM_V1_DOWNCONVERT=1`)。未対応命令は FailFast。 - [ ] v1→v0 最小ダウングレード(任意・`HAKO_NYVM_V1_DOWNCONVERT=1`)。未対応命令は FailFast。
- [x] Bridge 正規化: `HAKO_BRIDGE_INJECT_SINGLETON` 実装Array/Map len → Method 化、FailFast 付き)。 - [x] Bridge 正規化: `HAKO_BRIDGE_INJECT_SINGLETON` 実装Array/Map len → Method 化、FailFast 付き)。
- [x] Bridge 正規化: `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` 実装(φ をブロック先頭へ移動、順序保護)。 - [x] Bridge 正規化: `HAKO_BRIDGE_EARLY_PHI_MATERIALIZE` 実装(φ をブロック先頭へ移動、順序保護)。
- [ ] 静的Boxメソッドの self 先頭統一LLVM 命令Boxを含む。互換が必要な経路は `HAKO_BRIDGE_INJECT_SINGLETON=1` で補完。
- [x] GateC file/pipe × Plugins ON/OFF の対称性スモーク(数値出力=終了コード)。 - [x] GateC file/pipe × Plugins ON/OFF の対称性スモーク(数値出力=終了コード)。
- [ ] StageA map リテラルの堅牢化(エスケープ/Unicode/{}/不正形診断)。 - [ ] StageA map リテラルの堅牢化(エスケープ/Unicode/{}/不正形診断)。
- [x] スモーク実行権限core/* に chmod +x 反映)。 - [x] スモーク実行権限core/* に chmod +x 反映)。

View File

@ -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の Singletonself規約の明文化と整備
- 背景: 静的Boxのメソッドは「先頭に selfSingletonを持つ」前提。MIR/Verifier もこの arity を期待する。
- 現状: 一部の LLVM 命令Box相当例: `LLVMPhiInstructionBox.lower_phi` 等)が self 非対応の設計で呼び出されるケースがあり、Verifier が「Singleton+引数…」の期待と不一致になる。
- 対応: 本フェーズで「メソッド定義側を self 先頭に揃える」ことを原則とし、互換が必要な経路には `HAKO_BRIDGE_INJECT_SINGLETON=1`opt-inで受理・補完する。
- FailFast: 期待 arity と不一致の呼び出しは静かなフォールバックを行わず、安定化メッセージで失敗させる。
- v1→v0 ダウングレードRunner 側)が未実装(任意) - v1→v0 ダウングレードRunner 側)が未実装(任意)
- 代表命令const/binop/compare/ret/branch/jump/phiの最小降格を `HAKO_NYVM_V1_DOWNCONVERT=1` で optin。 - 代表命令const/binop/compare/ret/branch/jump/phiの最小降格を `HAKO_NYVM_V1_DOWNCONVERT=1` で optin。
- 未対応命令は FailFast。Core 直行が有効な場合は直行を優先。 - 未対応命令は FailFast。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 形(将来拡張)。

View File

@ -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 変数宣言**
#### **基本パターン** #### **基本パターン**