Files
hakorune/docs/development/architecture/mir-naming-box.md
nyash-codex 28a312ea0d feat(naming): Phase 25.4-A - NamingBox SSOT化完了
🎯 目的: static/global 呼び出しの名前決定を src/mir/naming.rs に一本化

 実装完了:
- NamingBox(src/mir/naming.rs)実装
  - encode_static_method(box, method, arity)
  - normalize_static_global_name(func_name)
  - static/global 名前の正規化ロジック統一

- MIR Builder統合(SSOT使用)
  - src/mir/builder/decls.rs: build_static_main_box
  - src/mir/builder/exprs.rs: 静的メソッド呼び出し
  - src/mir/builder/metadata/propagate.rs: メタデータ伝播
  - src/mir/builder/observe/mod.rs: Observe機能
  - src/mir/builder/observe/types.rs: 型観測(新規)

- VM実行器統合(SSOT使用)
  - src/backend/mir_interpreter/handlers/calls/global.rs
  - normalize_static_global_name使用
  - レガシーフォールバック削除済み確認

- テスト追加
  - src/tests/mir_static_box_naming.rs
  - encode/normalize の動作検証

📚 ドキュメント:
- docs/development/architecture/mir-naming-box.md
  - NamingBoxの設計思想
  - SSOT原則の説明
  - 使用例

🎯 効果:
- 名前決定ロジックが1箇所に集約
- Builder/VM で同じ正規化ルールを使用
- 将来の名前空間拡張が容易

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 09:01:43 +09:00

31 lines
1.9 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 NamingBox — static box naming rules
目的: Builder と VM で「static box メソッドの名前」を一箇所で定義し、`main._nop/0` などのケースズレを防ぐ。
## 役割
- `canonical_box_name(raw)`:
- `main``Main` に正規化(最小限の補正)
- それ以外はそのまま返す(仕様拡張は別フェーズで検討)
- `encode_static_method(box, method, arity)`:
- `Box.method/arity` 形式にまとめるBuilder 側で defs→MIR 関数化時に使用)
- `normalize_static_global_name(func_name)`:
- `main._nop/0` のような global 呼び出しを `Main._nop/0` に正規化VM 側で実行前に使用)
## 呼び出し箇所
- Builder (`src/mir/builder/decls.rs`):
- `build_static_main_box` が static メソッドを関数化する際に `encode_static_method` を使用。
- `Main._nop/0` のような名前がここで確定する。
- VM (`src/backend/mir_interpreter/handlers/calls/global.rs`):
- `execute_global_function``normalize_static_global_name` を通してから function table を検索。
- canonical 名(例: `Main._nop/0`)→元の名(互換用)の順に探す。
## 追加テスト
- `src/tests/mir_static_box_naming.rs`:
- `Main._nop/0` の defs が MIR module に存在することを確認。
- `me._nop()` 呼び出しが Global call として `_nop/0` を指していることを観測。
- `NYASH_TO_I64_FORCE_ZERO=1` 下で `apps/tests/minimal_to_i64_void.hako` を VM 実行し、静的メソッド呼び出し経路が通ることを確認。
## Phase 21.7 との関係
- Phase 21.7Methodize Static Boxesでは `Global("Box.method")` を「単一インスタンスを持つ Method 呼び出し」に寄せる予定。
- NamingBox はその前段として「名前の正規化」を共有化する箱。Method 化するときもこのルールを踏襲し、Box 名のゆらぎを防ぐ。