docs(phase-29): JoinIR/Stage-1 環境変数棚卸し完了
Step 1: ENV_INVENTORY.md 作成 (docs/private submodule) Step 2: 実装統一確認 - 既にhelper経由で統一済み Step 3: environment-variables.md に JoinIRセクション追加 Step 4: スモークテスト pass Step 5: CURRENT_TASK.md に完了記録 発見事項: - JoinIR: env_flag_is_1() ヘルパー経由で統一済み - Stage-1: src/config/env/stage1.rs SSOT モジュール経由で統一済み - NYASH_RUN_JOINIR_MINIMAL は既に削除済み 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -12,13 +12,13 @@
|
||||
- **25.x**: Stage0/Stage1/Stage‑B / Selfhost ラインのブートストラップと LoopForm v2 / LoopSSA v2 まわりの整備。
|
||||
- **25.1 系**: Stage‑B / Stage‑1 / selfhost 向けに、Rust MIR / LoopForm v2 / LoopSSA v2 を段階的に整える長期ライン。
|
||||
- **26-F / 26-G**: Exit PHI / ExitLiveness 用の 4箱構成(LoopVarClassBox / LoopExitLivenessBox / BodyLocalPhiBuilder / PhiInvariantsBox)と MirScanExitLiveness の準備。
|
||||
- **26-H / 27.x(New)**: JoinIR 設計+ミニ実験フェーズ → minimal/skip_ws/FuncScanner.trim/Stage‑1 UsingResolver minimal/FuncScanner.append_defs minimal/StageB minimal までを対象に、制御構造を関数呼び出しに正規化する IR とランナーを段階的に整備中(27.4 で Header φ を LoopHeaderShape 化、27.5 で Exit φ の意味を LoopExitShape として固定済み。27.6-1/2/3 で ExitPhiBuilder 側にトグル付きバイパスを入れて A/B 観測まで完了、seal_phis と Header φ バイパスの整合性は別フェーズで refinement 済み。27.8〜27.11/27.13/27.14 で skip_ws/trim/Stage‑1 UsingResolver minimal/FuncScanner.append_defs minimal/StageB minimal を Shared Builder Pattern+MIR-based lowering に移行し、ValueId 範囲管理も一元化。27.8-27.11/27.13/27.15 で JoinIR Runner を JoinValue↔VMValue 変換+`MirInterpreter::execute_box_call` ラッパ経由で Rust VM の BoxCall 意味論と統合し、skip_ws/trim の JoinIR Runner スタンドアロン実行が安定(GC/BoxRef も Arc ベースで統合済み)。Phase 27-shortterm の S‑1〜S‑5.4 は完了、Phase 28-midterm では per-loop lowering を増やさず、LoopForm+LoopVarClassBox+LoopExitLivenessBox を入力にした「汎用 Loop→JoinIR ロワー」に畳み込んでいく方針に切り替え済み(join-ir.md に JoinIR ロワーが“やらないこと”チェックリストを明記)。
|
||||
- **26-H / 27.x(New)**: JoinIR 設計+ミニ実験フェーズ → minimal/skip_ws/FuncScanner.trim/Stage‑1 UsingResolver minimal/FuncScanner.append_defs minimal/StageB minimal までを対象に、制御構造を関数呼び出しに正規化する IR とランナーを段階的に整備中(27.4 で Header φ を LoopHeaderShape 化、27.5 で Exit φ の意味を LoopExitShape として固定済み。27.6-1/2/3 で ExitPhiBuilder 側にトグル付きバイパスを入れて A/B 観測まで完了、seal_phis と Header φ バイパスの整合性は別フェーズで refinement 済み。27.8〜27.11/27.13/27.14 で skip_ws/trim/Stage‑1 UsingResolver minimal/FuncScanner.append_defs minimal/StageB minimal を Shared Builder Pattern+MIR-based lowering に移行し、ValueId 範囲管理も一元化。27.8-27.11/27.13/27.15 で JoinIR Runner を JoinValue↔VMValue 変換+`MirInterpreter::execute_box_call` ラッパ経由で Rust VM の BoxCall 意味論と統合し、skip_ws/trim の JoinIR Runner スタンドアロン実行が安定(GC/BoxRef も Arc ベースで統合済み)+ `joinir_runner_standalone_skip_ws` を NYASH_JOINIR_EXPERIMENT=1 で常時叩ける正常系テストとして昇格済み。Phase 27-shortterm の S‑1〜S‑5.4 は完了、Phase 28-midterm では per-loop lowering を増やさず、LoopForm+LoopVarClassBox+LoopExitLivenessBox を入力にした「汎用 Loop→JoinIR ロワー」に畳み込んでいく方針に切り替え済み(join-ir.md に JoinIR ロワーが“やらないこと”チェックリストを明記)。Phase 29-longterm では LoopForm を「構造専任箱」とし、その隣に LoopScopeShape(LoopVarClassBox / ExitLiveness / LocalScopeInspector を統合したスコープ+進捗箱)と progress インバリアント(ゼロ進捗 backedge チェック)を Verifier 側に足して、JoinIR 側でループ進捗インバリアントまで構造的に扱う計画を TASKS に追加済み)。
|
||||
- Rust 側:
|
||||
- LoopForm v2 + ControlForm + Conservative PHI は、代表テスト(Stage‑1 UsingResolver / Stage‑B 最小ループ)ではほぼ安定。
|
||||
- 静的メソッド呼び出し規約と `continue` 絡みの PHI は 25.1m までで根治済み。
|
||||
- .hako 側:
|
||||
- Stage‑B コンパイラ本体 / LoopSSA v2 / BreakFinderBox / PhiInjectorBox はまだ部分実装。
|
||||
- JSON v0 / selfhost ルートは Rust 側の LoopForm v2 規約に追いつかせる必要がある。Stage‑B selfhost 経路は依然として Program JSON が取れていないが、直近の実行では `Unknown method 'main' on InstanceBox` は再現しておらず、別の箇所で落ちている可能性が高い。Stage‑1 CLI ブリッジ自体は Rust バイナリ経由で発火して `stage1_cli.hako` 実行までは到達しているが、その後 BuildBox.emit_program_json_v0 → `ParserBox.parse_program2` 実行中に VM 側の step budget 超過(max_steps 1_000_000→2_000_000 でも NG)とプラグイン未ロード警告で止まっており、Parser 側の本体ループが budget を食い尽くしている可能性が高い(詳細は stage1-cli-loop-analysis.md と private 側の parser-budget メモ参照)。Rust VM の budget エラーは fn/bb/last_inst + Span (あれば file:line:col) 付きで出るようにしたので、Span が入る MIR なら再発時の位置特定がしやすい(Stage‑1 CLI の現在の MIR には Span が無く行番号は未表示)。
|
||||
- JSON v0 / selfhost ルートは Rust 側の LoopForm v2 規約に追いつかせる必要がある。Stage‑B selfhost 経路は依然として Program JSON が取れていないが、直近の実行では `Unknown method 'main' on InstanceBox` は再現しておらず、別の箇所で落ちている可能性が高い。Stage‑1 CLI ブリッジ自体は Rust バイナリ経由で発火して `stage1_cli.hako` 実行までは到達しており、**ParserBox と StringHelpers まわりのすべての `loop(cont == 1) { ... cont = 0 }` パターンを `loop(true) { ...; continue / break }` に書き換えた結果、BuildBox.emit_program_json_v0 → `ParserBox.parse_program2` の無限ループ/step budget 超過は解消済み**(minimal_ssa_skip_ws.hako で Program(JSON v0) が RC=0 で出ることを確認済み)。Rust VM の budget エラーは fn/bb/last_inst + Span (あれば file:line:col) 付きで出るようにしたので、今後類似の問題が出ても位置特定は容易。
|
||||
- Stage‑B / FuncScanner ライン:
|
||||
- Phase 25.3 をクローズし、`stageb_fib_program_defs_canary_vm.sh` が緑(`defs` に `TestBox.fib/Main.main`、fib.body.body[*] に `Loop`)。
|
||||
- Stage‑B は block パーサ優先 + defs を Block 包みで構造化。次手: Stage‑1 UsingResolver ループの Region+next_i 揃え / Stage‑1 CLI program-json selfhost 準備。
|
||||
@ -28,6 +28,33 @@
|
||||
|
||||
## 1. 最近完了した重要タスク
|
||||
|
||||
### 1-00a. Phase 29 小タスク — JoinIR/Stage-1 環境変数棚卸し(**完了** 2025-11-25)
|
||||
|
||||
**目的**
|
||||
- JoinIR/Stage-1 関連の環境変数を棚卸し・整理
|
||||
- 実装の統一確認(env helper経由)
|
||||
- ドキュメント更新
|
||||
|
||||
**成果物**
|
||||
1. **ENV_INVENTORY.md 作成**: `docs/private/roadmap2/phases/phase-29-longterm-joinir-full/ENV_INVENTORY.md`
|
||||
- JoinIR 環境変数 6個(`NYASH_JOINIR_*`)
|
||||
- Stage-1 環境変数(Primary 7個 + Aliases 16個)
|
||||
- 分類: user-facing / dev-only / internal / alias
|
||||
|
||||
2. **実装統一確認**
|
||||
- JoinIR: `env_flag_is_1()` ヘルパー経由で統一済み(9ファイル)
|
||||
- Stage-1: `src/config/env/stage1.rs` SSOT モジュール経由で統一済み
|
||||
|
||||
3. **ドキュメント更新**: `docs/reference/environment-variables.md`
|
||||
- JoinIR セクション追加(6変数 + 使用例)
|
||||
|
||||
**発見事項**
|
||||
- `NYASH_RUN_JOINIR_MINIMAL` は既に削除済み(good)
|
||||
- Stage-1 alias群は警告付きで互換維持(`warn_alias_once`)
|
||||
- テストファイルの直接env var参照はスキップガード用途で許容
|
||||
|
||||
---
|
||||
|
||||
### 1-01. Phase 26-E — PhiBuilderBox SSOT統一化(**完了** 2025-11-22)
|
||||
|
||||
**目的**
|
||||
|
||||
Submodule docs/private updated: 4fc663a2e8...6523cdc838
@ -113,7 +113,7 @@ NYASH_CLI_VERBOSE=2 \
|
||||
- `[selfhost/ny] calling maybe_dump_mir (RUST_MIR_DUMP_PATH=..., cli_verbose=...)`
|
||||
- `[selfhost/ny] ✅ MIR dump file created` または `⚠️ MIR dump file NOT created`
|
||||
|
||||
注意: `apps/selfhost/compiler/compiler.hako` が存在しない場合、preferred child process 経路は発火しない。
|
||||
注意: Ny selfhost compiler のエントリは現在 `lang/src/compiler/entry/compiler.hako` に統一されているよ。このファイルが存在しない場合、preferred child process 経路は発火しない。
|
||||
|
||||
---
|
||||
|
||||
@ -139,6 +139,32 @@ NYASH_CLI_VERBOSE=2 \
|
||||
|
||||
---
|
||||
|
||||
## JoinIR 実験 (Phase 27+)
|
||||
|
||||
JoinIR は制御構造を関数呼び出し + 継続に正規化する IR 層(実験中)。
|
||||
|
||||
| 変数 | デフォルト | 適用経路 | 説明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `NYASH_JOINIR_EXPERIMENT=1` | OFF | Any | JoinIR 実験モード メイントグル |
|
||||
| `NYASH_JOINIR_HEADER_EXP=1` | OFF | Any | Header PHI bypass 有効化(dev-only) |
|
||||
| `NYASH_JOINIR_EXIT_EXP=1` | OFF | Any | Exit PHI 実験(dev-only) |
|
||||
| `NYASH_JOINIR_LOWER_FROM_MIR=1` | OFF | Any | MIRベース lowering 有効化(dev-only) |
|
||||
| `NYASH_JOINIR_LOWER_GENERIC=1` | OFF | Any | Generic lowering パス(dev-only) |
|
||||
| `NYASH_JOINIR_VM_BRIDGE=1` | OFF | Any | VM bridge テスト(dev-only) |
|
||||
|
||||
### JoinIR 使用例
|
||||
```bash
|
||||
# JoinIR 実験モード有効化
|
||||
NYASH_JOINIR_EXPERIMENT=1 ./target/release/hakorune program.hako
|
||||
|
||||
# Header PHI bypass 併用
|
||||
NYASH_JOINIR_EXPERIMENT=1 NYASH_JOINIR_HEADER_EXP=1 ./target/release/hakorune program.hako
|
||||
```
|
||||
|
||||
詳細: [ENV_INVENTORY.md](../private/roadmap2/phases/phase-29-longterm-joinir-full/ENV_INVENTORY.md)
|
||||
|
||||
---
|
||||
|
||||
## MIR 検証系(代表)
|
||||
|
||||
| 変数 | デフォルト | 適用経路 | 説明 |
|
||||
|
||||
Reference in New Issue
Block a user