diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 4addc4a6..ffabe6a5 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -1,4 +1,4 @@ -# Current Task — Phase 21.8 / 25 / 25.1 / 25.2 Snapshot(2025-11-18 時点) +# Current Task — Phase 21.8 / 25 / 25.1 / 25.2 / 25.4 Snapshot(2025-11-18 時点) > このファイルは「今どこまで終わっていて、次に何をやるか」を 1000 行以内でざっくり把握するためのスナップショットだよ。 > 詳細な履歴やログは `git log CURRENT_TASK.md` からいつでも参照できるようにしておくね。 @@ -334,7 +334,24 @@ Rust 側は LoopForm v2 / Stage‑B fib / Stage‑1 UsingResolver 構造テス --- -以上が 2025-11-18 時点の Phase 21.8 / 25 / 25.1 / 25.2 ラインの「いまどこ」「なに済み」「なに残り」だよ。 +# Phase 25.4 — Naming & Stage‑1 CLI Cleanup(design only) + +- ねらい: + - static box / global 呼び出しの命名規約を NamingBox に集約し、VM 側のレガシーフォールバック経路を撤去する。 + - Stage‑1 CLI の env/トグル解釈を 1 箇所の設定箱にまとめ、stage1_main の責務を薄く保つ。 + - `__mir__.log` ベースの MIR ログ観測ポイントをドキュメントで一覧化し、将来の正式 API 化に備える。 +- 現状: + - NamingBox(`src/mir/naming.rs`)は導入済みで、Builder 側の static メソッド名は `encode_static_method` 経由、VM 側の global 呼び出しは `normalize_static_global_name` 経由になっている。 + - VM 側の「canonical 名で見つからなければ元名でもう一度探す」フォールバックは削除済みで、`mir_static_box_naming` テスト群が `Main._nop/0` 経路を固定している。 + - Stage‑1 CLI は env-only 仕様(argv 依存なし)で Stage0 ブリッジと接続済みだが、env 群の解釈はまだ stage1_main 内に散在している。 +- このフェーズでやること(設計レベル): + - NamingBox を「static 名に触るすべてのコードの SSOT」として整理(直接 `format!("Box.main")` する箇所を洗い出し)。 + - `Stage1CliConfigBox`(仮)を設計し、env→Config 変換の責務とフィールドを docs に書き出す(実装は後続でも可)。 + - `__mir__.log` のタグと用途を 1 ページの docs にまとめ、dev 用ログと残したい観測ログを分けておく。 + +--- + +以上が 2025-11-18 時点の Phase 21.8 / 25 / 25.1 / 25.2 / 25.4 ラインの「いまどこ」「なに済み」「なに残り」だよ。 次にどの箱から攻めるか決めたら、ここに箇条書きで足していこうね。 diff --git a/docs/development/roadmap/phases/phase-21.7-normalization/README.md b/docs/development/roadmap/phases/phase-21.7-normalization/README.md index b0ad0a02..9d0077dd 100644 --- a/docs/development/roadmap/phases/phase-21.7-normalization/README.md +++ b/docs/development/roadmap/phases/phase-21.7-normalization/README.md @@ -40,3 +40,6 @@ Rollout Plan Rollback - Disable HAKO_MIR_BUILDER_METHODIZE. Revert to Global("Box.method") resolution path (current 21.6 behavior). +Current notes (Phase 25.x bring-up) +- static box 内のローカル呼び出し(例: `Main.main` → `me._nop()`)が Global 呼び出しのまま落ちるケースを確認。NamingBox(`src/mir/naming.rs`)で `main`→`Main` 正規化は済み。 +- 次のステップ: methodization 時に `ensure_static_box_instance` 経由で receiver を付与し、Global 呼び出しを Method 呼び出しに寄せる(本フェーズの実装タスクとして残置)。 diff --git a/docs/development/roadmap/phases/phase-25.1/stage1-usingresolver-loopform.md b/docs/development/roadmap/phases/phase-25.1/stage1-usingresolver-loopform.md index 94e67bde..448c988b 100644 --- a/docs/development/roadmap/phases/phase-25.1/stage1-usingresolver-loopform.md +++ b/docs/development/roadmap/phases/phase-25.1/stage1-usingresolver-loopform.md @@ -71,6 +71,7 @@ - `--emit-mir-json` / env `STAGE1_EMIT_MIR_JSON=1` - `--backend vm|llvm` (既定 vm) - self-host 経路は env `NYASH_USE_STAGE1_CLI=1` で有効化(既定 OFF) + - 現状の stage1_main は argv 依存を外し、env だけを見る仕様(NYASH_USE_STAGE1_CLI + STAGE1_*)。Void 返りの数値変換は `NYASH_TO_I64_FORCE_ZERO=1` で明示的に潰す(stage1_debug.sh でセット済み)。 ## (ドラフト)Stage‑1 CLI パイプライン図(文書向け簡略版) ``` diff --git a/docs/development/roadmap/phases/phase-25.4-naming-cli-cleanup/README.md b/docs/development/roadmap/phases/phase-25.4-naming-cli-cleanup/README.md new file mode 100644 index 00000000..874acb1b --- /dev/null +++ b/docs/development/roadmap/phases/phase-25.4-naming-cli-cleanup/README.md @@ -0,0 +1,55 @@ +# Phase 25.4 — Naming & Stage‑1 CLI Cleanup + +Status: design only(小さな箱の片付けフェーズ) + +目的: +- static box / global 呼び出しまわりの命名規約を NamingBox に一本化し、レガシーなフォールバック経路を整理する。 +- Stage‑1 CLI の env/トグル解釈を 1 箇所の「設定箱」にまとめ、stage1_main の責務を薄くする。 +- MIR デバッグログ(`__mir__.log`)のタグと配置をドキュメントで見える化し、将来の正式機能化に備える。 + +## 1. NamingBox SSOT 化(static box naming) + +- 対象: + - `src/mir/naming.rs` + - `src/mir/builder/decls.rs`(`build_static_main_box` など) + - `src/backend/mir_interpreter/handlers/calls/global.rs` +- ゴール: + - static box 名に触るコードはすべて NamingBox (`canonical_box_name`, `encode_static_method`, `normalize_static_global_name`) 経由に揃える。 + - VM 側の global 呼び出しは canonical 名(例: `Main._nop/0`)のみを見る。レガシーな「元名での再探索」フォールバックは撤去済みの状態を維持。 + - テスト: `src/tests/mir_static_box_naming.rs` を維持し、`apps/tests/minimal_to_i64_void.hako` が Main._nop/0 → StringHelpers.to_i64 経由で実行されることを固定。 + +## 2. Stage1 CLI 設定箱(env→Config 変換) + +- 対象: + - `lang/src/runner/stage1_cli.hako` + - 新規: `Stage1CliConfigBox`(案) +- ゴール: + - NYASH_USE_STAGE1_CLI / STAGE1_EMIT_* / STAGE1_BACKEND / STAGE1_SOURCE / STAGE1_PROGRAM_JSON / NYASH_TO_I64_* などの env を、1 箇所で構造体 `Config` に変換する箱を作る。 + - stage1_main(args) は、この `Config` に対する分岐ロジックだけを持つ(env.get を散在させない)。 + - env の一覧と既定値/優先順位を docs(Phase 25.x or env-var reduction report)に反映し、将来の環境変数削減フェーズの入力にする。 + +## 3. MIR ログ観測リスト(__mir__.log の整理) + +- 対象: + - `__mir__.log` を使用している .hako ファイル(例: `lang/src/runner/stage1_cli.hako`, `lang/src/shared/common/string_helpers.hako`) + - docs 新規: `docs/development/architecture/mir-logs-observability.md`(案) +- ゴール: + - どのタグ(例: `[stage1_main] ...`, `[string_helpers/to_i64] ...`)がどのレイヤ/目的のためのデバッグかを一覧にする。 + - dev 用ログと将来残したい観測ログを分けておき、Phase 25.x 以降で `__mir__` を正式な「MIR 観測 API」として設計するための下地にする。 + +## 4. Fixture の最小化(optional / 後続タスク) + +- 対象: + - `apps/tests/minimal_to_i64_void.hako` + - StringHelpers 系のテスト用 .hako(将来新設) +- ゴール: + - Void → 数値変換など、特定の型崩れバグを再現するための fixture を「本当に必要な最小の箱」に分解する。 + - 代表テストの MIR ログが過度に肥大化しないようにしつつ、numeric core / to_i64 の仕様を小さな .hako で固定していく。 + +## 5. 他フェーズとの関係 + +- Phase 21.7(Normalization / Methodize Static Boxes): + - NamingBox による static 名正規化(`main` → `Main`)はすでに導入済みで、本フェーズはその SSOT 化と VM 側フォールバックの整理にあたる。 + - 実際の「Global(\"Box.method\") → Method{receiver=static singleton}」リライトは Phase 21.7 本体で実装する予定。 +- Phase 25.1(Stage‑1 UsingResolver / CLI 本線): + - 本フェーズは 25.1 の「片付け+観測」側タスクとして扱い、CLI 本体や UsingResolver の仕様変更は行わない(構造整理のみ)。