📊 Phase 25.1l: Region観測レイヤー骨格 + スコープ契約設計理解
**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: 既存テスト全て緑維持
This commit is contained in:
@ -349,6 +349,11 @@ impl<'a> LoopBuilder<'a> {
|
||||
};
|
||||
let form = ControlForm::from_loop(loop_shape.clone());
|
||||
|
||||
// Region/GC 観測レイヤ(Phase 25.1l):
|
||||
// NYASH_REGION_TRACE=1 のときだけ、Stage‑B 周辺ループの
|
||||
// Region 情報(entry/exit/slots)をログに出すよ。
|
||||
crate::mir::region::observer::observe_control_form(self.parent_builder, &form);
|
||||
|
||||
// Build exit PHIs for break statements using ControlForm wrapper
|
||||
let exit_snaps = self.exit_snapshots.clone();
|
||||
crate::mir::phi_core::loopform_builder::build_exit_phis_for_control(
|
||||
@ -778,7 +783,6 @@ impl<'a> LoopBuilder<'a> {
|
||||
}
|
||||
// Reset to pre-if snapshot, then delegate to shared helper
|
||||
self.parent_builder.variable_map = pre_if_var_map.clone();
|
||||
let mut ops = Ops(self);
|
||||
|
||||
// Phase 25.1h: ControlForm統合版に切り替え
|
||||
let if_shape = IfShape {
|
||||
@ -789,6 +793,13 @@ impl<'a> LoopBuilder<'a> {
|
||||
};
|
||||
let form = ControlForm::from_if(if_shape.clone());
|
||||
|
||||
// Region/GC 観測レイヤ(Phase 25.1l):
|
||||
// NYASH_REGION_TRACE=1 のときだけ、Stage‑B 周辺 If 構造の
|
||||
// Region 情報(entry/exit/slots)をログに出すよ。
|
||||
crate::mir::region::observer::observe_control_form(self.parent_builder, &form);
|
||||
|
||||
let mut ops = Ops(self);
|
||||
|
||||
crate::mir::phi_core::if_phi::merge_modified_with_control(
|
||||
&mut ops,
|
||||
&form,
|
||||
|
||||
Reference in New Issue
Block a user