Files
hakorune/docs/reference/plugin-system/nyash-toml-v2_1-spec.md

56 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# nyash.toml v2.1 拡張仕様(最小)
目的: プラグインBoxのメソッド引数として、他のBoxを不透明参照BoxRefで安全に受け渡す。
## 変更点v2 → v2.1
- メソッド引数型に `kind = "box"` を追加(当面は `category = "plugin"` のみ)
- TLVに BoxRefHandleを追加tag = 8
- payload: `type_id: u32 (LE)`, `instance_id: u32 (LE)`合計8バイト
- 既存タグは不変1=Int64, 2=String(UTF-8), 3=Bool
## 例: libraries セクション
```toml
[libraries]
[libraries."libnyash_filebox_plugin.so"]
boxes = ["FileBox"]
path = "./target/release/libnyash_filebox_plugin.so"
[libraries."libnyash_filebox_plugin.so".FileBox]
type_id = 6
abi_version = 1
[libraries."libnyash_filebox_plugin.so".FileBox.methods]
# 既存
birth = { method_id = 0 }
open = { method_id = 1 }
close = { method_id = 4 }
# 追加例: Box引数を1つ受け取る
copyFrom = { method_id = 7, args = [ { kind = "box", category = "plugin" } ] }
```
備考:
- `args` を省略した場合は引数なしゼロ引数とみなすv2互換
- 複数引数は配列で列挙(例: 2引数なら2要素
- ユーザー定義Boxや複雑なビルトインBoxは当面対象外将来のvtable/retain-release設計で拡張
## 呼び出し時のTLVエンコード
- 先頭ヘッダ `[ver:1, argc:1, rsv:2]` の後、各引数を `tag + payload` で列挙
- `tag=8 (Handle/BoxRef)`: payload = `type_id(4) + instance_id(4)` LE
- 未対応Box種別に対してはエラーを返す開発時のみ toString フォールバックを許容可能)
## 戻り値v2.1→v2.2
- v2.1: Int/String/Bool1/6/3とVoid(9)
- v2.2: BoxRef(Handle, tag=8) の「返り値」対応を追加(同一/別Box型どちらも可
- payload: `type_id:u32` + `instance_id:u32`
- Loaderは `type_id` から `lib_name/box_name` を逆引きし、`PluginBoxV2` を生成して返す
## 互換性
- `args` 宣言がない既存v2設定はそのまま利用可
- BoxRefを使わないメソッドは従来通り Int/String/Bool のみで動作
## 実装メモ(参考)
- Loader: invoke時の引数エンコードに `tag=4` を追加(`category=plugin` のみ)
- プラグイン側: 受領した `type_id` と期待型を照合し、不一致ならエラー
- 所有権: 呼び出し中の一時借用(保持は将来の retain/release で対応)