🎯 目的: 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>
1.9 KiB
1.9 KiB
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.7(Methodize Static Boxes)では
Global("Box.method")を「単一インスタンスを持つ Method 呼び出し」に寄せる予定。 - NamingBox はその前段として「名前の正規化」を共有化する箱。Method 化するときもこのルールを踏襲し、Box 名のゆらぎを防ぐ。