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

1.9 KiB
Raw Blame History

MIR NamingBox — static box naming rules

目的: Builder と VM で「static box メソッドの名前」を一箇所で定義し、main._nop/0 などのケースズレを防ぐ。

役割

  • canonical_box_name(raw):
    • mainMain に正規化(最小限の補正)
    • それ以外はそのまま返す(仕様拡張は別フェーズで検討)
  • 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_functionnormalize_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 名のゆらぎを防ぐ。