feat: Implement Phase 9.78e instance_v2 migration with unified registry

Major achievements:
-  UserDefinedBoxFactory implementation with unified registry integration
-  Constructor execution for user-defined boxes (Person init working)
-  Import path fixes across interpreter modules
-  unwrap_instance helper function for InstanceBox operator support

Technical details:
- Modified UnifiedBoxRegistry to handle empty box_types() factories
- Implemented constructor execution in execute_new for InstanceBox
- Added unwrap_instance helper to handle InstanceBox wrapping in operators
- Updated CURRENT_TASK.md with detailed progress tracking

Next: Fix 4 operator functions to complete InstanceBox operator support

🤖 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 00:21:20 +09:00
parent 5a50cf6415
commit e5e381aa83
9 changed files with 274 additions and 70 deletions

View File

@ -0,0 +1,86 @@
Nyashプログラミング言語のInstanceBoxアーキテクチャについて深い技術相談です。
【現在の状況】
Phase 9.78eでinstance_v2統一実装を進めています。統一レジストリUnifiedBoxRegistryによりビルトインBox、ユーザー定義Box、プラグインBoxをすべて同じインターフェースで生成する仕組みを実装しました。
【発生している問題】
BuiltinBoxFactoryがStringBoxを作る際、InstanceBoxでラップして返しています
```rust
// StringBox作成時
let inner = StringBox::new(value);
let instance = InstanceBox::from_any_box("StringBox".to_string(), Box::new(inner));
Ok(Box::new(instance) as Box<dyn NyashBox>)
```
しかし、演算子処理try_add_operationが直接StringBoxを期待しているため
```
❌ Runtime error:
⚠️ Invalid operation: Addition not supported between StringBox and StringBox
```
【2つの選択肢】
Option 1: すべてのBoxをInstanceBoxでラップする統一アーキテクチャ
- StringBox → InstanceBox<StringBox>
- IntegerBox → InstanceBox<IntegerBox>
- UserBox → InstanceBox<UserBox>
- 演算子処理をInstanceBox対応に修正
Option 2: ビルトインは直接返す混在アーキテクチャ
- StringBox → StringBox直接
- UserBox → InstanceBox<UserBox>
- ビルトインと他で扱いが異なる
【Option 1を推奨する理由】
1. Everything is Box哲学の完全実現
- すべてのBoxが同じ形で統一される美しさ
- ビルトイン、ユーザー定義、プラグインの区別なし
2. 将来の拡張性
- プラグインBoxも同じように扱える
- 新しいBox型追加時も同じパターン
3. デバッグ・保守性
- 統一構造によりデバッグツールが書きやすい
- メモリ管理、ライフサイクル管理が統一的
4. ユーザー体験の一貫性
- ユーザーから見て全Box型が同じ挙動
- 継承・デリゲーションも統一的
【技術的な懸念事項】
1. パフォーマンス
- 二重構造によるオーバーヘッド
- 演算子呼び出し時の追加のダウンキャスト
2. 実装の複雑さ
- すべての演算子処理を修正する必要
- 既存コードとの互換性
3. 型安全性
- inner_contentがOption<Box<dyn NyashBox>>なので、実行時チェックが必要
【質問】
1. このアーキテクチャ選択についてどう思われますか?
2. パフォーマンスへの影響は許容範囲でしょうか?(最適化は後回しで良い前提)
3. Everything is Box哲学の観点から、統一アーキテクチャは正しい方向性でしょうか
4. 他の言語Ruby、Python、JavaScriptの類似事例はありますか
【実装方針案】
```rust
// 演算子処理の修正例
fn try_add_operation(left: &dyn NyashBox, right: &dyn NyashBox) -> Option<Box<dyn NyashBox>> {
// InstanceBoxの場合、内包されたBoxを取り出す
let left_inner = if let Some(instance) = left.as_any().downcast_ref::<InstanceBox>() {
instance.inner_content.as_ref()?.as_ref()
} else {
left
};
// 以下、従来の処理...
}
```
Nyashの設計哲学と実装の現実性のバランスについて、専門的な視点からアドバイスをお願いします。