Files
hakorune/docs/archive/phases/phase-170-197/phase194_joinlooptrace.md

91 lines
3.7 KiB
Markdown
Raw Normal View History

# Phase 194: JoinLoopTrace / Debug Integration
**Status**: In Progresstrace.rs は実装済み、呼び出し置き換えと docs 反映が残り)
**Date**: 2025-12-06
## Goal
JoinIR / ループ周辺のデバッグ出力を `JoinLoopTrace` に集約し、環境変数ベースの制御と `logging_policy.md` の方針に沿った形に整理する。
---
## Implemented Infrastructure
### JoinLoopTrace モジュール
- File: `src/mir/builder/control_flow/joinir/trace.rs`
- 役割:
- JoinIR ループまわりの `eprintln!` を 1 箱に集約する。
- 環境変数からフラグを読み取り、どのカテゴリのトレースを出すかを制御する。
- 対応環境変数:
- `NYASH_TRACE_VARMAP=1` variable_map トレースvar → ValueId
- `NYASH_JOINIR_DEBUG=1` JoinIR 全般のデバッグ(パターン routing、merge 統計など)
- `NYASH_OPTION_C_DEBUG=1` PHI 生成Option C周りのトレース
- `NYASH_JOINIR_MAINLINE_DEBUG=1` mainline routing代表関数の routingトレース
- `NYASH_LOOPFORM_DEBUG=1` LoopForm 関連トレース(レガシー互換)
### 主なメソッド
- `pattern(tag, pattern_name, matched)` パターン検出・選択
- `varmap(tag, &BTreeMap<String, ValueId>)` variable_map の状態
- `joinir_stats(tag, func_count, block_count)` JoinIR モジュールの統計
- `phi(tag, msg)` PHI 関連の操作
- `merge(tag, msg)` JoinIR→MIR マージ進行
- `exit_phi(tag, var_name, old_id, new_id)` Exit PHI 接続
- `debug(tag, msg)` / `routing(tag, func_name, msg)` / `blocks(tag, msg)` / `instructions(tag, msg)` 汎用デバッグ
グローバルアクセサ:
```rust
pub fn trace() -> &'static JoinLoopTrace
```
でどこからでも呼び出せる。
---
## Remaining Work (Phase 194)
### Task 194-3: 生 `eprintln!` の JoinLoopTrace 置き換え
対象(例):
- `src/mir/builder/control_flow/joinir/patterns/pattern4_with_continue.rs`
- まだ 8 箇所程度 `eprintln!` ベースのログが残っている。
- ここを順次:
- varmap ログ → `trace().varmap(...)`
- パターン / ルーティング系 → `trace().pattern(...)` / `trace().routing(...)`
- それ以外の debug → `trace().debug(...)`
に差し替える。
同様に、他の JoinIR / loop 関連ファイルに散在している `[joinir/...]``eprintln!` も、必要に応じて `trace.rs` 経由に寄せる。
### Task 194-4: logging_policy.md 反映
- File: `docs/development/current/main/logging_policy.md`
- 追記内容:
- JoinIR / ループ系のトレースカテゴリを 1 セクションにまとめる:
- varmapNYASH_TRACE_VARMAP
- joinir-debugNYASH_JOINIR_DEBUG
- phi-debugNYASH_OPTION_C_DEBUG
- mainline-debugNYASH_JOINIR_MAINLINE_DEBUG
- 開発時のみ ON、本番パスでは OFF を前提とする運用メモ。
- `trace.rs` による prefix`[trace:pattern]`, `[trace:varmap]`, ...)を簡単に説明。
---
## Success Criteria
- JoinIR / ループ周辺の `eprintln!` が、意味あるかたちで `JoinLoopTrace` 経由に置き換わっている。
- `NYASH_TRACE_VARMAP=1``NYASH_JOINIR_DEBUG=1` の挙動が `logging_policy.md` に説明されている。
- デフォルトenv 未設定ではトレースは出ず、既存の代表テストPattern 1〜4はログ無しで PASS する。
---
## Notes
- Phase 194 は **挙動を変えない** リファクタフェーズ(観測レイヤーの整形)として扱う。
- Loop パターンや ExitBinding まわりは Phase 193/196/197 で安定しているので、それを壊さない形でログだけを寄せることが目的。
Status: Historical