📝 docs: Phase 9.78a実装箇所詳細分析追加

## 🔍 実装箇所の詳細分析
- MIR生成部分: build_new_expression()でRefNew→NewBox修正
- VM実行部分: 主要な修正箇所(BoxFactory統合、スコープ管理)
- 共有コンポーネント: BoxFactory、InstanceBoxをVMでも使用

## 📋 CURRENT_TASK.md更新
- Phase 9.78a VM統一Box処理の実装ステップ詳細化
- Step 1-5の具体的な実装内容を明記
- 関連ドキュメントへのリンク追加

次はStep 1のMIR生成修正から実装開始!

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-20 16:08:22 +09:00
parent 59cae9fe2a
commit c11b68af90
2 changed files with 112 additions and 59 deletions

View File

@ -368,71 +368,71 @@ cargo build --release -j32 --features wasm-backend
- ✅ substring(start, end)メソッド実装完了
- ✅ fini後のアクセスエラー削除is_finalized()チェック削除)
## 🚀 **次期実装計画: VM Plugin System統合**
## 🚀 **実装中: Phase 9.78a VM統一Box処理**
### 🎯 **目標: FileBoxプラグインをVMから呼び出す**
### 🎯 **目標: すべてのBox型をVMで統一的に処理**
**現在の状況**:
- ✅ プラグインシステムBID-FFI v1は動作中
- ✅ FileBoxプラグインは完成・テスト済み
- ❌ VMMIRからプラグイン呼び出しが未実装
**発見された問題**:
- ❌ ユーザー定義Box未対応NewBoxで文字列返すだけ
- ❌ birth/finiライフサイクル欠落
- ❌ メソッド呼び出しハードコード
### 📊 **実装フェーズ**
**解決策**: インタープリターと同等の統一処理を実装
#### **Phase 1: VM ExternCall実装** (優先度: 最高)
1. **現在のスタブを実装に置き換え**
```rust
// src/backend/vm.rs
MirInstruction::ExternCall { iface_name, method_name, args, result } => {
// 現在: println!("External call stub")
// TODO: plugin_loader_v2との接続
}
```
### 📊 **実装ステップ(詳細分析済み)**
2. **プラグインローダー統合**
- VMにplugin_loader_v2への参照を持たせる
- ExternCallでプラグインメソッドを呼び出し
- 結果をレジスタに格納
#### **Step 1: MIR生成修正** ✅ 分析完了
**場所**: `src/mir/builder.rs` - `build_new_expression()`
```rust
// 現在: RefNew命令不適切
// 修正: NewBox命令を生成
emit(MirInstruction::NewBox {
dst,
box_type: class,
args: arg_values
})
```
#### **Phase 2: 型変換レイヤー実装** (優先度: 高)
1. **MIRValue ↔ NyashValue変換**
- VM内部のMIRValue型
- プラグインが期待するNyashValue型
- 相互変換関数の実装
#### **Step 2: VM構造体拡張** 🔄 実装予定
**場所**: `src/backend/vm.rs`
```rust
pub struct VM {
// 追加
box_factory: Arc<BoxFactory>,
plugin_loader: Option<Arc<PluginLoaderV2>>,
scope_tracker: ScopeTracker,
box_declarations: Arc<RwLock<HashMap<String, BoxDeclaration>>>,
}
```
2. **メモリ管理**
- プラグインから返されたBoxの所有権管理
- Arc<Mutex>の適切な処理
#### **Step 3: NewBox統一実装** 🔄 実装予定
- BoxFactory経由で作成
- ユーザー定義Boxのbirth実行
- スコープ登録fini用
#### **Phase 3: FileBoxテストケース作成** (優先度: 中)
1. **VM経由のFileBoxテスト**
```nyash
// VMバックエンドで実行
local file = new FileBox("test.txt")
file.write("Hello from VM!")
local content = file.read()
print(content)
file.close()
```
#### **Step 4: BoxCall統一実装** 🔄 実装予定
- ビルトイン/ユーザー定義/プラグイン統一処理
- メソッドディスパッチ共通化
2. **パフォーマンス測定**
- インタープリター vs VM比較
- プラグイン呼び出しオーバーヘッド測定
#### **Step 5: ライフサイクル管理** 🔄 実装予定
- ScopeTracker実装
- スコープ終了時の自動fini
- 逆順実行(作成順と逆)
### 🔧 **技術的課題と解決策**
**課題1: プラグインローダーへのアクセス**
- 解決: VMインスタンスにplugin_loaderフィールド追加
**課題2: 非同期プラグイン呼び出し**
- 解決: 現在は同期呼び出しのみ対応、将来的に非同期対応
**課題3: エラーハンドリング**
- 解決: プラグインエラーをMIRレベルで適切に処理
### 🔧 **共有コンポーネント**
- `BoxFactory` - すでに存在、VMでも使用
- `InstanceBox` - ユーザー定義Box表現
- `PluginLoaderV2` - プラグイン統合
### 📈 **期待される成果**
-VM経由でのプラグイン実行
-高速なファイル操作
-将来的な拡張性(他のプラグインも同様に統合可能)
-すべてのBox型が同じライフサイクル
-birth → 使用 → fini の一貫性
-プラグインBoxもVMで動作
- ✅ 保守性とバグの削減
最終更新: 2025-08-21 - VM Plugin System統合計画追加
### 📚 **関連ドキュメント**
- [Phase 9.78a計画書](./予定/native-plan/issues/phase_9_78a_vm_plugin_integration.md)
- [深層分析](./予定/native-plan/issues/phase_9_78a_vm_plugin_integration_deep_analysis.md)
- [VM統合仕様書](./説明書/reference/plugin-system/vm-plugin-integration.md)
最終更新: 2025-08-21 - Phase 9.78a VM統一Box処理開始

View File

@ -238,15 +238,68 @@ print %5
3. パフォーマンス劣化が10%以内
4. 既存のテストがすべてパス
## 🔧 実装箇所の詳細分析
### 1. MIR生成部分mir/builder.rs
**現在の実装**
```rust
fn build_new_expression(&mut self, class: String, arguments: Vec<ASTNode>) {
match class.as_str() {
"IntegerBox" | "StringBox" | "BoolBox" => {
// 基本型は最適化(直接値を返す)
emit(MirInstruction::Const { ... })
}
_ => {
// その他はRefNew不適切
emit(MirInstruction::RefNew { ... })
}
}
}
```
**必要な修正**
```rust
// すべてのnew式に対してNewBox命令を生成
let arg_values = arguments.iter()
.map(|arg| self.build_expression(arg))
.collect::<Result<Vec<_>, _>>()?;
emit(MirInstruction::NewBox {
dst,
box_type: class,
args: arg_values
})
```
### 2. VM実行部分backend/vm.rs
**主要な修正箇所**
- `NewBox`処理 - BoxFactory統合、birth実行
- `BoxCall`処理 - 統一メソッドディスパッチ
- スコープ管理 - ScopeTracker実装
- VM初期化 - BoxFactory、PluginLoader注入
### 3. 共有コンポーネント
**VMでも使用する既存コンポーネント**
- `BoxFactory` - src/box_factory.rs
- `BoxDeclaration` - src/ast.rs
- `PluginLoaderV2` - src/runtime/plugin_loader_v2.rs
- `InstanceBox` - src/instance_v2.rs
## 📅 実装スケジュール
1. **Week 1**: VMValue拡張とテスト
2. **Week 2**: プラグインローダー統合
3. **Week 3**: ExternCall実装
4. **Week 4**: FileBoxテストと最適化
1. **Step 1**: MIR生成修正NewBox命令
2. **Step 2**: VM構造体拡張BoxFactory統合
3. **Step 3**: NewBox実装birth実行含む
4. **Step 4**: BoxCall統一実装
5. **Step 5**: スコープ管理とfini実装
6. **Step 6**: テストとデバッグ
---
**作成日**: 2025-08-21
**更新日**: 2025-08-21実装箇所詳細追加
**優先度**: 高Phase 8.4 AST→MIR Loweringの次
**前提条件**: Phase 9.78 BoxFactory統一実装完了