feat: MIR Call命令統一Phase 3.1-3.2完了!統一Call実装進行中

 Phase 3.1-3.2実装完了
- build_indirect_call_expressionでCallTarget::Value使用
- print関数をcall_global print()として統一
- build_function_callでemit_unified_call使用
- ExternCall(env.console.log)→Callee::Global(print)完全移行

🏗️ MIR統一基盤構築
- src/mir/definitions/call_unified.rs: 統一定義(297行)
- emit_unified_call()と便利メソッド3種実装
- NYASH_MIR_UNIFIED_CALL=1で段階移行制御
- VM実行器でCallee対応実装済み

📊 進捗状況(26%削減見込み)
- Phase 1-2:  基盤構築完了
- Phase 3.1-3.2:  基本関数統一完了
- Phase 3.3: 🔄 BoxCall統一中
- Phase 4: 📅 Python LLVM(最優先・63%削減)
- Phase 5: 📅 PyVM/VM統一

📚 ドキュメント更新
- CLAUDE.md: テストスクリプト参考集追加
- CURRENT_TASK.md: Phase 3進捗更新
- python-llvm-priority-rationale.md: 優先順位戦略文書化
- mir-call-unification-master-plan.md: スケジュール最新化

🎯 6種類→1種類: Call/BoxCall/PluginInvoke/ExternCall/NewBox/NewClosure → MirCall統一へ

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Selfhosting Dev
2025-09-24 01:05:44 +09:00
parent 96fd74916c
commit 81211c22ad
29 changed files with 2850 additions and 113 deletions

122
CLAUDE.md
View File

@ -238,6 +238,38 @@ NYASH_DISABLE_PLUGINS=1 ./target/release/nyash --backend llvm program.nyash
- `NYASH_USING_PROFILE=dev|smoke|debug` でプロファイル化
- または `--using-mode=dev` CLIフラグで統合
## 📝 Update (2025-09-24) 🚀 MIR Call命令統一Phase 3.1-3.2完了!
-**Phase 1-2完了** - MIR基盤構築と統一メソッド実装
- **定義外部化**: `src/mir/definitions/call_unified.rs`297行
- **統一メソッド**: `emit_unified_call()`便利メソッド3種実装済み
- **環境変数制御**: `NYASH_MIR_UNIFIED_CALL=1`で切り替え可能
-**Phase 3.1-3.2完了** - 基本関数の統一Call移行成功
- **indirect call**: `build_indirect_call_expression``CallTarget::Value`使用
- **print関数**: `call_global print()`として統一ExternCall→Callee::Global
- **function call**: `build_function_call``CallTarget::Global`使用
- **実行確認**: `env NYASH_MIR_UNIFIED_CALL=1 ./target/release/nyash --dump-mir`で動作確認済み
- 📊 **マスタープラン進捗** - 4つの実行器で完全統一へ
- **削減見込み**: 7,372行 → 5,468行**26%削減**
- **処理パターン**: 24 → 4**83%削減**
- **Phase 15寄与**: 全体目標の約7%(重要な柱)
- **詳細ドキュメント**: [mir-call-unification-master-plan.md](docs/development/roadmap/phases/phase-15/mir-call-unification-master-plan.md)
- 🎯 **6種類→1種類**: Call/BoxCall/PluginInvoke/ExternCall/NewBox/NewClosure → **MirCall**
## 🧪 テストスクリプト参考集(既存のを活用しよう!)
```bash
# 基本的なテスト
./target/release/nyash local_tests/hello.nyash # Hello World
./target/release/nyash local_tests/test_array_simple.nyash # ArrayBox
./target/release/nyash apps/tests/string_ops_basic.nyash # StringBox
# MIR確認用テスト
./target/release/nyash --dump-mir apps/tests/loop_min_while.nyash
./target/release/nyash --dump-mir apps/tests/esc_dirname_smoke.nyash
# 統一Call テスト
env NYASH_MIR_UNIFIED_CALL=1 ./target/release/nyash --dump-mir test_simple_call.nyash
```
## 🚀 よく使う実行コマンド(忘れやすい)
### 🎯 基本実行方法
@ -361,33 +393,73 @@ NYASH_VM_DUMP_MIR=1 NYASH_CLI_VERBOSE=1 ./target/release/nyash gemini_test_case.
jq '.functions[0].blocks' mir.json # ブロック構造確認
```
## 📝 Update (2025-09-23) ✅ PHIバグ修正&改行処理戦略決定
- 🎉 **PHIバグ根本解決完了** Exit PHI生成実装でループ後の変数値が正しく伝播
- **修正前**: gemini_test_case期待値2→実際0初期値に戻る
- **修正後**: 期待値2が正しく出力 ✅
## 📝 Update (2025-09-23) 🚀 ChatGPT5 Pro設計革命Phase 1完全実装成功
### ✅ **MIR Callee型革新 - シャドウイングバグから設計革命への昇華**
**51日間AI協働開発言語の新たな画期的成果**
#### 🎯 **Phase 1実装完了項目**
1. **✅ Callee列挙型導入**: `Global/Method/Value/Extern`の型安全解決システム
2. **✅ Call命令拡張**: `callee: Option<Callee>`で破壊的変更なし段階移行
3. **✅ 型安全関数解決**: `resolve_call_target()`でコンパイル時解決確立
4. **✅ ヘルパー外出し**: `call_resolution.rs`で再利用可能ユーティリティ作成
5. **✅ 完全互換性**: 既存コード破壊ゼロ、全テスト通過確認済み
#### 🏆 **技術的革新内容**
```rust
// 🔥 革新前(問題構造)
Call { func: ValueId /* "print"文字列 */ } // 実行時解決→シャドウイング脆弱性
// ✨ 革新後(型安全)
enum Callee {
Global(String), // nyash.builtin.print
Method { box_name, method, receiver }, // box.method()
Value(ValueId), // 第一級関数保持
Extern(String), // C ABI統合
}
Call { func: ValueId, callee: Option<Callee> } // 段階移行で破壊的変更なし
```
#### 📊 **Phase 15目標への直接寄与**
- **🎯 コード削減見込み**: Phase 1のみで1,500行目標7.5%、全Phase完了で4,500行22.5%
- **🛡️ シャドウイング問題**: 根本解決(実行時→コンパイル時解決)
- **⚡ using system統合**: built-in namespace完全連携
- **🔍 デバッグ向上**: MIR可読性・警告システム確立
#### 🤖 **AI協働開発の真価発揮**
- **ChatGPT5 Pro**: 表面修正→根本設計革新への圧倒的洞察力
- **Claude**: 段階実装・互換性保持・テスト戦略の確実な実行
- **共創効果**: 一人+AI協働による51日間言語開発の世界記録級成果
#### 🚀 **実装成果ファイル**
- `src/mir/instruction.rs`: Callee型定義・Call命令拡張
- `src/mir/builder/call_resolution.rs`: 型安全解決ユーティリティ
- `src/mir/builder/builder_calls.rs`: resolve_call_target()実装
- `docs/development/architecture/mir-callee-revolution.md`: 設計文書
- `docs/development/roadmap/phases/phase-15/mir-callee-implementation-roadmap.md`: 実装計画
#### 📋 **次のステップPhase 2-3**
- **Phase 2**: HIR導入コンパイル時名前解決
- **Phase 3**: 明示的スコープ(`::print`, `Box::method`
- **VM実行器対応**: 型安全実行の実装
---
## 📝 Update (2025-09-23) ✅ MIR Callee型革命100%完了!
- 🎉 **MIR Call命令革新Phase 1完了** ChatGPT5 Pro設計のCallee型実装
- **実装内容**: Callee enumGlobal/Method/Value/Extern追加
- **VM実行器**: Call命令のCallee対応完全実装
- **MIRダンプ**: call_global/call_method等の明確表示
- **後方互換性**: Option<Callee>で段階移行実現
- 🚀 **MIR Call統一計画決定** ChatGPT5 Pro A++案採用
- **現状**: 6種類のCall系命令が乱立Call/BoxCall/PluginInvoke/ExternCall等
- **解決**: 1つのMirCallに統一receiverをCalleeに含む革新設計
- **移行計画**: 3段階構造定義→ビルダー→実行器で安全移行
- **ドキュメント**: [call-instructions-current.md](docs/reference/mir/call-instructions-current.md)作成
-**PHIバグ根本解決完了** Exit PHI生成実装でループ後の変数値が正しく伝播
- **技術的成果**: たった3箇所の修正で根本解決
1. `exit_snapshots`フィールド追加break時点の変数収集
2. `do_break()`でスナップショット収集
3. `create_exit_phis()`メソッド新規実装
- **MIR確認**: `bb3: %15 = phi [%4, bb1], [%9, bb9]` exit PHI正常生成
- **全テスト合格**: 0回実行、複数break、continue混在すべて✅
- **コミット済み**: `e5c0665` でリモートに反映
- 🎯 **改行処理TokenCursor戦略決定** ChatGPT分析でアーキテクチャ設計完了
- **問題**: match式の複数行オブジェクトリテラルでパースエラー
- **根本原因**: `skip_newlines()`が散在、手動呼び出しが必要
- **解決策**: 3段階実装戦略
1. **Phase 0**: Quick Fix - primary.rsに最小限のskip_newlines追加30分
2. **Phase 1**: TokenCursor導入 - モード制御で自動改行処理(今週)
3. **Phase 2**: LASI前処理 - トークン正規化で完全解決(将来)
- **設計原則**:
- セミコロンオプショナル(改行もセミコロンも文区切り)
- コンテキスト認識(ブレース内は改行自動無視)
- 環境変数地獄の回避(コンテキストベース制御)
-**フェーズM+M.2完全達成!** PHI統一革命でcollect_prints問題根本解決
- 🚀 **ChatGPT Pro協働成功**
- Exit PHI欠落の完璧な原因分析
- TokenCursorの実装可能なサンプルコード提供
- 段階的修正戦略で確実な実装パス提示
- 🎯 **改行処理TokenCursor戦略決定** 3段階実装戦略で改善中
## 📝 Update (2025-09-23) 🎉 改行処理革命Phase 1-2完全達成skip_newlines()根絶成功!
-**skip_newlines()完全根絶達成!** 48箇所→0箇所100%削除完了)