## 🎊 成果概要 **Phase 3: 全体統一** - MIR Builder 側を StaticMethodId 準拠に統一! ### ✅ 実装完了項目(全4タスク) 1. **素手 split 調査** (Phase 3.1) - 調査結果: known.rs に2箇所のみ(split_once) - unified_emitter には素手 split なし - 置き換え対象: 2箇所のみで簡潔 2. **unified_emitter.rs 統一** (Phase 3.2) - methodization 部分を StaticMethodId::parse() に変更 - decode_static_method() → StaticMethodId::parse() - is_static_method_name() → StaticMethodId::parse().is_some() - arity 判定を Optional 対応(None も許容) 3. **known.rs split_once 置き換え** (Phase 3.3) - 2箇所の split_once('.') → StaticMethodId::parse() - box_name 取得を構造化表現経由に統一 - コード削減: 8行 → 4行(50%削減) 4. **テスト実行・確認** (Phase 3.4) - json_lint_stringutils_min_vm: PASS ✅ - namingbox_static_method_id: 13/13 PASS ✅ - ビルド成功、警告のみ(既存問題) ### 📊 技術的効果 - **素手 split 根絶**: 全箇所を StaticMethodId 経由に統一 - **コード品質向上**: 構造化表現で型安全化 - **保守性向上**: 名前パース処理が SSOT に集約 - **後方互換**: 既存機能に影響なし ### 🎯 Phase 4 への準備完了 - Builder/VM 両方が StaticMethodId SSOT 準拠 - ドキュメント整備のみ残存(2-3時間) --- **Phase 0**: ✅ 完了 (Silent Failure 根絶) **Phase 1**: ✅ 完了 (SSOT 基盤確立) **Phase 2**: ✅ 完了 (VM 統一) **Phase 3**: ✅ 完了 (Builder 統一) **Phase 4**: 次のタスク (ドキュメント化) 🧮 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
rewrite — Known 経路の関数化 + 特殊規則(P1)
目的
- Known 受け手のメソッド呼び出し
obj.m(a)を関数呼び出しClass.m(me,obj,a)に正規化し、実行系を単純化する。 - 表示系の特殊規則(
toString/stringify→ 規範str)を一箇所に集約する(互換維持)。 - 仕様は不変。Union は観測のみで、Known のみ関数化対象。
責務
- known.rs: Known 経路の instance→function 正規化(ユーザー Box のみ、既存ガード尊重)。
- special.rs:
toString/stringify→strの早期処理(Class.str/0 を優先、互換で stringify/0)。equals/1もここに集約(Known 優先 → 一意候補のみ許容)。
- 観測は observe 層に委譲(resolve.choose など)。
非責務(禁止)
- Union の強引な関数化(Unknown/曖昧なものは扱わない)。
- 起源付与/型推論の実施(origin 層に限定)。
- NYABI 呼び出しや VM 直接呼び出し。
API(呼び出し側から)
try_known_rewrite(builder, recv, class, method, args) -> Option<Result<ValueId,String>>try_unique_suffix_rewrite(builder, recv, method, args) -> Option<Result<ValueId,String>>try_known_or_unique(builder, recv, class_opt, method, args) -> Option<Result<ValueId,String>>try_early_str_like(builder, recv, class_opt, method, arity) -> Option<Result<ValueId,String>>try_special_equals(builder, recv, class_opt, method, args) -> Option<Result<ValueId,String>>
レイヤールール
- Allowed: Builder のメタ参照/関数名生成、MirInstruction の生成(関数化結果)。
- Forbidden: origin/observe のロジックを混在させない(必要時は呼び出しで連携)。
決定原則
- Known のみ関数化(
value_origin_newboxが根拠)。 - 表示系は規範
strを優先、stringifyは当面互換として許容。 - すべての決定は dev 観測(resolve.try/choose)で可視化し、挙動は不変。