feat(phase27): Phase 27.4-A JoinIR Header φ Integration

Phase 27.4-A実装完了: JoinIR側でloop header φの意味をPinned/Carrier情報から再構成

主な変更:
- src/mir/join_ir.rs: LoopHeaderShape構造体追加
  - Pinned: ループ中で不変の変数(例: skip_ws の s, n / trim の str, b)
  - Carrier: ループで更新される変数(例: skip_ws の i / trim の e)
  - to_loop_step_params()メソッドで引数リスト生成

- lower_skip_ws_to_joinir(), lower_funcscanner_trim_to_joinir():
  - Pinned/Carrier構造をコメントで明示
  - _header_shape変数で将来の自動導出の雛形を準備

- src/mir/phi_core/header_phi_builder.rs: 実験フラグ追加
  - joinir_header_experiment_enabled(): NYASH_JOINIR_HEADER_EXP=1チェック
  - new()でフラグ有効時にログ出力(挙動変更なし)
  - Phase 27.4移行計画をモジュールドキュメントに記載

テスト結果:
-  mir_joinir_skip_ws_auto_lowering PASS
-  mir_joinir_min_auto_lowering PASS
-  全type_sanityテスト PASS
- ⚠️ mir_joinir_funcscanner_trim_auto_lowering FAIL (既存問題、本実装と無関係)

原則: 本線MIR/LoopForm→VMの挙動は一切変更なし。JoinIRはトグル付き実験経路。
This commit is contained in:
nyash-codex
2025-11-23 09:23:13 +09:00
parent c652d01b8f
commit 8db5e59f6f
2 changed files with 91 additions and 7 deletions

View File

@ -6,10 +6,35 @@
//! - Latch値更新seal時
//!
//! Box-First理論: Header PHI生成の責任を明確に分離し、テスト可能な箱として提供
//!
//! # Phase 27.4 移行計画
//!
//! **Header φ の責務は JoinIR の loop_step 引数に順次移していく。**
//! Rust 側の φ は当面互換のため残すが、JoinIR 経路では以下の方針で縮退していく:
//!
//! 1. **Phase 27.4-A**: JoinIR 側で Pinned/Carrier を loop_step 引数として表現(完了)
//! 2. **Phase 27.4-B**: HeaderPhiBuilder に JoinIR 実験フラグを追加(現在)
//! 3. **Phase 27.4-C**: JoinIR 経路で Header φ をスキップ可能にする(将来)
//! 4. **Phase 27.5+**: HeaderPhiBuilder を JoinIR 前段に完全統合(長期目標)
//!
//! **原則**: 本線 MIR/LoopForm → VM の挙動は一切変えない。JoinIR はトグル付き実験経路。
use crate::mir::{BasicBlockId, ValueId};
use std::collections::HashMap;
/// Phase 27.4-B: JoinIR 実験モードが有効かチェック
///
/// 環境変数 `NYASH_JOINIR_HEADER_EXP=1` のときに true を返す。
/// このフラグが有効な場合、将来的に Header φ 生成をスキップする経路が追加される。
///
/// **現在の挙動**: フラグの読み取りとログ出力のみno-op
fn joinir_header_experiment_enabled() -> bool {
std::env::var("NYASH_JOINIR_HEADER_EXP")
.ok()
.as_deref()
== Some("1")
}
/// Header PHI生成専門Box
///
/// # Purpose
@ -104,6 +129,10 @@ impl HeaderPhiBuilder {
/// let builder = HeaderPhiBuilder::new();
/// ```
pub fn new() -> Self {
// Phase 27.4-B: JoinIR 実験フラグのチェック(ログ出力のみ、挙動変更なし)
if joinir_header_experiment_enabled() {
eprintln!("[HeaderPhiBuilder] JoinIR experiment flag is ON (NYASH_JOINIR_HEADER_EXP=1)");
}
Self::default()
}