**Region Box統一理論の実装開始**
新規追加:
- src/mir/region/mod.rs: Region/RefSlotKind型定義
- src/mir/region/observer.rs: Region観測レイヤー
- docs/development/roadmap/phases/phase-25.1l/: 設計ドキュメント
主要概念:
- Region Box = Function/Loop/If の統一箱
- RefSlotKind = GC管理用スロット種別(Strong/Weak/Borrowed/NonRef)
- 観測専用(NYASH_REGION_TRACE=1で動作、挙動変更なし)
設計理解の深化:
- ValueId(40)問題 = LoopForm v2スコープ契約違反の症状
- 根本解決 = Region観測で無名一時値のスコープまたぎを検出
- 箱理論3原則: 境界明確化/差し替え可能/段階的移行
関連議論:
- ChatGPT提案: Region統一理論でGC/寿命管理の基盤構築
- SlotRegistry: 変数の単一真実源(SSOT)
- 階層構造: FunctionRegion → LoopRegion → IfRegion
次のステップ:
- Phase 1: Region観測(現在)- 非破壊的追加
- Phase 2: メタデータ出力(MIR JSON拡張)
- Phase 3: GC統合(retain/release挿入)
テスト追加:
- lang/src/compiler/tests/stageb_mini_driver.hako
- tools/test_loopssa_breakfinder_slot.sh
Build: ✅ 全警告は既存のもの
Tests: 既存テスト全て緑維持
38 lines
1.2 KiB
Plaintext
38 lines
1.2 KiB
Plaintext
// breakfinder_direct_min.hako — BreakFinderBox 直接呼び出し用の極小ハーネス
|
||
//
|
||
// 目的:
|
||
// - Stage‑B/LoopSSA を経由せずに、BreakFinderBox.find_breaks/2 自体の
|
||
// MIR 形状と SSA 性を確認するための最小サンプルだよ。
|
||
// - Program(JSON v0) 文字列を 1 本用意して、BreakFinderBox.find_breaks(json, trace)
|
||
// を直接呼び出し、VM/Verifier で undefined receiver などのエラーを観測する。
|
||
//
|
||
// JSON 形状(loopssa_breakfinder_min.hako と同じ単純な緑ケース):
|
||
// {
|
||
// "kind":"Program",
|
||
// "functions":[
|
||
// {
|
||
// "name":"main",
|
||
// "blocks":[
|
||
// {"id":0,"loop_header":0,"loop_exit":2},
|
||
// {"id":1},
|
||
// {"id":2}
|
||
// ]
|
||
// }
|
||
// ]
|
||
// }
|
||
|
||
using lang.compiler.builder.ssa.exit_phi.break_finder as BreakFinderBox
|
||
|
||
static box Main {
|
||
method main(args) {
|
||
// 単純な Program(JSON v0) を直接埋め込む
|
||
local json = "{\"kind\":\"Program\",\"functions\":[{\"name\":\"main\",\"blocks\":[{\"id\":0,\"loop_header\":0,\"loop_exit\":2},{\"id\":1},{\"id\":2}]}]}"
|
||
|
||
// trace_flag=1 で BreakFinderBox 内部の挙動を観測する
|
||
local breaks = BreakFinderBox.find_breaks(json, 1)
|
||
print(breaks)
|
||
return 0
|
||
}
|
||
}
|
||
|