chore: Phase 25.1 完了 - LoopForm v2/Stage1 CLI/環境変数削減 + Phase 26-D からの変更

Phase 25.1 完了成果:
-  LoopForm v2 テスト・ドキュメント・コメント完備
  - 4ケース(A/B/C/D)完全テストカバレッジ
  - 最小再現ケース作成(SSAバグ調査用)
  - SSOT文書作成(loopform_ssot.md)
  - 全ソースに [LoopForm] コメントタグ追加

-  Stage-1 CLI デバッグ環境構築
  - stage1_cli.hako 実装
  - stage1_bridge.rs ブリッジ実装
  - デバッグツール作成(stage1_debug.sh/stage1_minimal.sh)
  - アーキテクチャ改善提案文書

-  環境変数削減計画策定
  - 25変数の完全調査・分類
  - 6段階削減ロードマップ(25→5、80%削減)
  - 即時削除可能変数特定(NYASH_CONFIG/NYASH_DEBUG)

Phase 26-D からの累積変更:
- PHI実装改善(ExitPhiBuilder/HeaderPhiBuilder等)
- MIRビルダーリファクタリング
- 型伝播・最適化パス改善
- その他約300ファイルの累積変更

🎯 技術的成果:
- SSAバグ根本原因特定(条件分岐内loop変数変更)
- Region+next_iパターン適用完了(UsingCollectorBox等)
- LoopFormパターン文書化・テスト化完了
- セルフホスティング基盤強化

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: ChatGPT <noreply@openai.com>
Co-Authored-By: Task Assistant <task@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-21 06:25:17 +09:00
parent baf028a94f
commit f9d100ce01
366 changed files with 14322 additions and 5236 deletions

View File

@ -98,6 +98,67 @@ python3 tools/phi_trace_check.py --file tmp/phi_trace.jsonl --summary
- `tools/smokes/phi_trace_local.sh`(ビルド→サンプル実行→チェックを一括)
- `tools/smokes/v2/run.sh --profile quick|integration` で代表スモークを実行
## MIR デバッグの入口まとめ
### 1. CLI レベルの MIR ダンプ
- ソースから直接 MIR を確認:
- `./target/release/nyash --dump-mir path/to/program.hako`
- VM 実行経路で MIR を一緒に吐く:
- `NYASH_VM_DUMP_MIR=1 ./target/release/nyash path/to/program.hako`
- JSON で詳細解析したい場合:
- `./target/release/nyash --emit-mir-json mir.json path/to/program.hako`
- 例: `jq '.functions[0].blocks' mir.json` でブロック構造を確認。
### 2. Scope / Loop ヒントNYASH_MIR_HINTS
- 環境変数でヒント出力を制御:
- `NYASH_MIR_HINTS="<target>|<filters>..."`
- 例:
- `NYASH_MIR_HINTS="trace|all"`stderr へ全ヒント)
- `NYASH_MIR_HINTS="jsonl=tmp/hints.jsonl|loop"`(ループ関連のみ JSONL 出力)
- 詳細: `docs/guides/scopebox.md`, `src/mir/hints.rs`
### 3. __mir__ ロガー(.hako から仕込む MIR ログ)
- 目的:
- `.hako` 側のループや SSA まわりを「MIR レベル」で観測するための dev 専用フック。
- 実行意味論には影響しないEffect::DebugLog のみ)。
- 構文(.hako 内):
```hako
__mir__.log("label", v1, v2, ...)
__mir__.mark("label")
```
- 第1引数は String リテラル必須(それ以外は通常の呼び出し扱い)。
- `log` は第2引数以降の式を評価し、その ValueId 群を記録。
- `mark` はラベルだけのマーカー。
- 戻り値は Void 定数扱いのため、式コンテキストに書いても型崩れしない。
- 実行時の有効化:
- `NYASH_MIR_DEBUG_LOG=1 ./target/release/nyash path/to/program.hako`
- VM の MIR interpreter が次のようなログを stderr に出力:
```text
[MIR-LOG] label: %10=123 %11="foo"
```
- 実装位置:
- lowering: `src/mir/builder/calls/build.rs` の `try_build_mir_debug_call`receiver が `__mir__` のときに `MirInstruction::DebugLog` を挿入)。
- 実行: `src/backend/mir_interpreter/handlers/mod.rs``NYASH_MIR_DEBUG_LOG=1` のときだけログを出す)。
- 利用例(ループ観測の定番パターン):
```hako
loop(i < n) {
__mir__.log("loop/head", i, n)
...
}
__mir__.mark("loop/exit")
```
- FuncScanner / StageB では、skip_whitespace や scan_all_boxes のループ頭・出口に挿入して、ValueId と値の流れを追跡する用途で使用している。
## 🔌 **プラグインテスターBID-FFI診断ツール**
```bash