From 03efa13e7607168a1f9c46ddd555dee79c10c28f Mon Sep 17 00:00:00 2001 From: nyash-codex Date: Tue, 25 Nov 2025 09:03:28 +0900 Subject: [PATCH] =?UTF-8?q?docs(phase-29):=20JoinIR/Stage-1=20=E7=92=B0?= =?UTF-8?q?=E5=A2=83=E5=A4=89=E6=95=B0=E6=A3=9A=E5=8D=B8=E3=81=97=E5=AE=8C?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- CURRENT_TASK.md | 31 +++++++++++++++++++++++-- docs/private | 2 +- docs/reference/environment-variables.md | 28 +++++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index dc090749..51527981 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -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) **目的** diff --git a/docs/private b/docs/private index 4fc663a2..6523cdc8 160000 --- a/docs/private +++ b/docs/private @@ -1 +1 @@ -Subproject commit 4fc663a2e88f09b8733a20a038ed7d3a5d1514f4 +Subproject commit 6523cdc838a302cbbad413c14128c6fb312f7508 diff --git a/docs/reference/environment-variables.md b/docs/reference/environment-variables.md index d675c8b9..a110bb15 100644 --- a/docs/reference/environment-variables.md +++ b/docs/reference/environment-variables.md @@ -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 検証系(代表) | 変数 | デフォルト | 適用経路 | 説明 |