📚 Phase 12: Nyashスクリプトプラグインシステム設計と埋め込みVM構想

## 主な成果
- Nyashスクリプトでプラグイン作成可能という革命的発見
- C ABI制約の分析と埋め込みVMによる解決策
- MIR/VM/JIT層での箱引数サポートの詳細分析

## ドキュメント作成
- Phase 12基本構想(README.md)
- Gemini/Codex先生の技術分析
- C ABIとの整合性問題と解決策
- 埋め込みVM実装ロードマップ
- 箱引数サポートの技術詳細

## 重要な洞察
- 制約は「リンク時にC ABI必要」のみ
- 埋め込みVMでMIRバイトコード実行により解決可能
- Nyashスクリプト→C ABIプラグイン変換が実現可能

Everything is Box → Everything is Plugin → Everything is Possible!
This commit is contained in:
Moe Charm
2025-08-30 22:52:16 +09:00
parent 7a0f9bd432
commit c13d9c045e
82 changed files with 5842 additions and 138 deletions

View File

@ -3,12 +3,11 @@
- プラグインBox引数の最小対応を追加TLV: BoxRef
- TLVタグ: 1=Bool, 2=I32, 3=I64, 4=F32, 5=F64, 6=String, 7=Bytes, 8=Handle(BoxRef)
- BoxRefはプラグインBox参照type_id:u32, instance_id:u32を8バイトでエンコード
- ユーザー定義Box・複雑なビルトインは当面非対応toStringフォールバック
- ユーザー定義/複雑なBoxは当面一部非対応toStringフォールバック。標準Boxはプラグイン経由で統一
現状のルーティング:
現状のルーティングPlugin-First:
- User-defined: MIR関数{Box}.{method}/{N}) にCall化関数存在時。それ以外はBoxCall。
- Builtin: BoxCall → VM内の簡易ディスパッチ
- Plugin: BoxCall → PluginLoaderV2.invoke_instance_method。
- Plugin: BoxCall → PluginInvokemethod_idが解決可能→ それ以外は名前解決で PluginHost.invoke_instance_method
今後のタスク:
- VM側のfrom Parent.method対応Builder/VM両対応
@ -74,7 +73,7 @@ NYASH_VM_PIC_DEBUG=1 # PICヒットのしきい値通過時にログ
```
今後の拡張:
- 一般`method_id`(ユーザー/ビルトイン/プラグインに対するvtableスロット→thunk直呼び。
- 一般`method_id`(ユーザー/プラグインに対するvtableスロット→thunk直呼び。
- PICのキャッシュ無効化型versionと多相PICへの拡張Phase 10
- SocketBoxVM
- 基本API: `bind/listen/accept/connect/read/write/close/isServer/isConnected`