Files
hakorune/docs/development/architecture/mir-logs-observability.md
nyash-codex 8750186e55 chore: Phase 26-H セッション完了 - 全ドキュメント更新
Phase 26-H 完了内容:
 JoinIR 型定義実装(src/mir/join_ir.rs)
 MIR → JoinIR 自動変換実装(lower_min_loop_to_joinir)
 自動変換テスト実装(mir_joinir_min_auto_lowering)
 PHI/Loop箱 → JoinIR 移行対応表追加(loopform_ssot.md)

ドキュメント更新:
- Phase 27 JoinIR タスク計画追加
- Phase 26-H タスク完了記録
- 各種 README 更新(進捗反映)
- CURRENT_TASK.md 更新

コミット統計: $(git status --short | wc -l) files changed

次のステップ: Phase 27 一般化 MIR → JoinIR 変換
2025-11-23 05:53:27 +09:00

182 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MIR ログ観測 (`__mir__.log`)
**目的**: `__mir__.log` の全使用箇所を一覧化し、dev専用か観測用かを分類する。
---
## 概要
`__mir__.log` は MIR レベルの観測・デバッグ用ログ出力。将来的にはdev向けの一時的なログと、本番でも使うMIR観測 APIに分離する予定。
---
## 使用箇所一覧表
### 1. Stage-1 CLI Debug10箇所
**場所**: `lang/src/runner/stage1_cli.hako`
| 行番号 | タグ | 説明 | 用途 |
|-------|------|-----|------|
| 157 | `[stage1_main] args_safe at entry` | stage1_main entry point args debug | Dev専用 |
| 171 | `[stage1_main] config` | Config box values debug | Dev専用 |
| 231 | `[_cmd_emit] args before size check` | _cmd_emit args debug | Dev専用 |
| 235 | `[_cmd_emit] argc after size` | _cmd_emit argc debug | Dev専用 |
| 254 | `[_cmd_emit_program_json] args before size check` | _cmd_emit_program_json args debug | Dev専用 |
| 258 | `[_cmd_emit_program_json] argc after size` | _cmd_emit_program_json argc debug | Dev専用 |
| 282 | `[_cmd_emit_mir_json] args before size check` | _cmd_emit_mir_json args debug | Dev専用 |
| 286 | `[_cmd_emit_mir_json] argc after size` | _cmd_emit_mir_json argc debug | Dev専用 |
| 348 | `[_cmd_run] args before size check` | _cmd_run args debug | Dev専用 |
| 352 | `[_cmd_run] argc after size` | _cmd_run argc debug | Dev専用 |
**有効化環境変数**: `STAGE1_CLI_DEBUG=1`
**説明**:
- Stage-1 CLI の entry point / config 値のデバッグ
- MIR Builder type confusion およびValueId 伝搬の検証用
- argv/argc の SSA 変数追跡
**用途と削除時期**:
- Phase 25.x 完了後に MIR Builder type confusion 修正完了で削除予定
- Config box の初期化検証が完了したら不要になる debug ログが含まれる可能性あり
---
### 2. FuncScanner Debug3箇所
**場所**: `lang/src/compiler/entry/func_scanner.hako`
| 行番号 | タグ | 説明 | 用途 |
|-------|------|-----|------|
| 315 | `skip_ws/head` | skip_ws loop head (i, n) | 観測用 |
| 319 | `skip_ws/loop` | skip_ws loop iteration (i, n) | 観測用 |
| 326 | `skip_ws/exit` | skip_ws loop exit (i, n) | 観測用 |
**有効化環境変数**: 現在明示的な環境変数なし
**説明**:
- FuncScanner の skip_ws ループの反復をMIR レベルで観測
- LoopForm v2 / PHI 機能の正しさを検証
- Region+next_i 伝播の SSA 動作確認
**用途と削除時期**:
- **保持推奨**: 将来的な MIR 観測は、用途に応じてMIR観測 APIとして昇格が望ましい
- 当面は明示的な環境変数(例: `NYASH_FUNCSCANNER_DEBUG=1`)で制御することも検討
---
### 3. StringHelpers Debug1箇所
**場所**: `lang/src/shared/common/string_helpers.hako`
| 行番号 | タグ | 説明 | 用途 |
|-------|------|-----|------|
| 27 | `[string_helpers/to_i64] x` | to_i64 input value debug | Dev専用 |
**有効化環境変数**: `NYASH_TO_I64_DEBUG=1`
**説明**:
- Void 型が Integer として扱われる問題の検証用
- `NYASH_TO_I64_FORCE_ZERO` workaround の正しさを確認
**用途と削除時期**:
- Phase 25.x 完了後に型伝播が正しく修正されたら削除予定
- 型強制処理の妥当性が確立したら不要になる
---
### 4. Test Comment1箇所
**場所**: `lang/src/compiler/tests/funcscanner_skip_ws_min.hako`
| 行番号 | タグ | 説明 | 用途 |
|-------|------|-----|------|
| 6 | (コメント内) | テスト場所の注釈 | コメント |
**説明**: `__mir__.log` の使用例をコメントで示す
---
### 5. MeCall Arity DebugPhase 25.x追加
**場所**: `src/mir/builder/method_call_handlers.rs`
| 行番号 | タグ | 説明 | 用途 |
|-------|------|-----|------|
| 70-73 | `[me-call] arity mismatch (instance)` | Instance method arity不一致警告 | Dev専用 |
| 98-101 | `[me-call] arity mismatch (static)` | Static method arity不一致警告 | Dev専用 |
| 150-154 | `[static-call] emit` | Static method呼び出しトレース | 観測用 |
**有効化環境変数**:
- `NYASH_ME_CALL_ARITY_STRICT=1` - 厳密モード(不一致でエラー返却)
- `NYASH_STATIC_CALL_TRACE=1` - トレースモードwarning出力
**説明**:
- `me.method(...)` 呼び出しのarity検証
- Instance methodreceiver追加vs Static methodreceiver なし)の判別
- ParserStmtBox.parse_using/4 の5引数バグ等の検出
**用途と削除時期**:
- Phase XXstatic box instance化完了後に削除予定
- 過渡期のデバッグ支援ログstatic boxのsingleton化後は不要
---
## 用途別集計表
| 用途 | 件数 | 内容 | 用途と削除時期 |
|-----|-------|-----|----------|
| **Dev専用** | 13 | Stage-1 CLI / StringHelpers / MeCall Arity デバッグ用 | 削除予定Phase 25.x 完了) |
| **観測用** | 4 | FuncScanner ループ反復 / Static call トレース | 保持推奨MIR観測 API 昇格) |
| **コメント** | 1 | テスト場所の注釈 | - |
---
## 用途に応じたMIR観測 API 設計Phase 25.x 完了後)
将来的な `__mir__.log` は暫定的な環境変数制御から脱却し、用途に応じて `MirLogBox` 等の箱化されたAPI経由で呼び出す形に整理することが望ましい。
### 設計例
```nyash
static box MirLogBox {
// Structured logging with levels
method debug(tag, ...values) {
if env.get("NYASH_MIR_LOG_LEVEL") != "debug" { return }
// ... implementation
}
method trace(tag, ...values) {
if env.get("NYASH_MIR_LOG_LEVEL") != "trace" { return }
// ... implementation
}
// Performance tracing
method trace_loop_iteration(loop_id, iteration, vars) {
// ... implementation
}
}
```
### 利点
- ログレベル設定debug/trace/info
- 条件付き出力JSON形式等
- 統合デバッグ機能拡張
- 用途に応じたMIR 観測とデバッグの分離
---
## コードの削除方針Phase 25.4
**現在の戦略では `__mir__` 使用箇所そのものには変更を加えず、分類と削除方針のみを記録。**
削除や統合は将来的な環境変数整理や機能分類時に実施する。
---
## 参考
- Phase 25.4 計画: `docs/private/roadmap2/phases/phase-25.4-naming-cli-cleanup/README.md`
- Stage-1 CLI: `lang/src/runner/stage1_cli.hako`
- FuncScanner: `lang/src/compiler/entry/func_scanner.hako`
- StringHelpers: `lang/src/shared/common/string_helpers.hako`