- TypeBox ABI雛形: メソッドスロット管理システム追加 - Type Registry: Array/Map/StringBoxの基本メソッド定義 - Host API: C ABI逆呼び出しシステム実装 - Phase 12ドキュメント整理: 設計文書統合・アーカイブ化 - MIR Builder: クリーンアップと分離実装完了 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
4.2 KiB
4.2 KiB
Phase 12: 究極のブレイクスルー - ユーザー箱とプラグイン箱の境界消滅
📅 2025-09-02 - ChatGPT5先生からの最終結論
🌟 結論
「ユーザー箱とプラグイン箱の境界をなくす」「Nyash ABIで拡張する」は綺麗に箱化して実装できます。既存のVM/PIC/vtable下地があるので、無理なく段階導入できます。
🎯 これが意味すること
1. Everything is Box の究極形
// もはや区別がない世界
box MyCustomBox { // ユーザー定義
// 自動的にプラグインとしても使える!
}
// C ABIプラグイン
extern box FileBox { // プラグイン
// ユーザーBoxと同じように扱える!
}
// 完全に透明な相互運用
local processor = new MyCustomBox()
processor.processFile(new FileBox("data.txt"))
2. 実装の現実性
既存インフラが整っている:
- VM: すでにBoxCallを統一的に処理
- PIC: Polymorphic Inline Cacheで高速化済み
- vtable: 動的ディスパッチ基盤完成
3. 段階的導入計画
Phase 1: 境界の曖昧化(1週間)
// ユーザーBoxに自動エクスポート機能
@export
box DataProcessor {
process(data) { ... }
}
Phase 2: 統一レジストリ(2週間)
// すべてのBoxが同じレジストリに登録
NyRegisterBox(spec, ORIGIN_USER); // ユーザー定義
NyRegisterBox(spec, ORIGIN_PLUGIN); // プラグイン
NyRegisterBox(spec, ORIGIN_BUILTIN); // ビルトイン
Phase 3: 完全統合(1ヶ月)
- ユーザーBoxの自動C ABI生成
- AOT時の最適化統一
- 実行時の完全な相互運用性
🚀 技術的実現方法
1. ユーザーBox → プラグイン変換
// コンパイル時に自動生成
impl UserBoxToPlugin for DataProcessor {
fn generate_c_abi() -> NyashTypeBox {
NyashTypeBox {
create: |args| Box::new(DataProcessor::new(args)),
invoke_id: |self, id, args| {
match id {
1 => self.process(args[0]),
_ => NyResult::Error("Unknown method")
}
},
// ...
}
}
}
2. 既存vtableの活用
// 現在のVMコード(すでに統一的!)
match value {
VMValue::BoxRef(b) => {
// ユーザーBox、プラグインBox、ビルトインBox
// すべて同じ経路で処理される!
self.call_box_method(b, method, args)
}
}
3. PIC最適化の共有
// 既存のPICがそのまま使える
struct PolymorphicInlineCache {
entries: [(TypeId, MethodId, FnPtr); 4],
}
// ユーザーBoxもプラグインBoxも同じ最適化を受ける
💡 革命的な利点
1. 開発体験の統一
- Nyashだけ書けばプラグインになる
- C/Rustの知識不要
- デバッグが容易
2. パフォーマンスの両立
- 開発時: インタープリター実行
- 本番時: AOT/JIT最適化
- 同じコードで両方可能
3. エコシステムの爆発的成長
- 誰でもプラグイン作者に
- Nyashで書いたBoxが他言語から使える
- 真の言語間相互運用性
📊 実装優先順位
-
即実装可能(既存基盤で動く)
- ユーザーBox登録API拡張
- 統一レジストリ実装
- 基本的な相互運用テスト
-
短期実装(軽微な修正)
- @exportアノテーション
- 自動C ABI生成
- ドキュメント整備
-
中期実装(最適化)
- AOT時の統一最適化
- クロスランゲージデバッガ
- パッケージマネージャー統合
🎯 結論
「箱の境界をなくす」は、単なる理想ではなく、現在のNyashアーキテクチャで実現可能な次のステップです。
既存のVM/PIC/vtable基盤があるため、追加実装は最小限で済みます。これこそが「Everything is Box」哲学の究極の実現です。