🚀 Phase 10.11: Everything is Plugin革命完了!

主な変更:
- ConsoleBox/MathBoxプラグイン実装・登録完了
- nyash_box.toml 2ファイルシステム設計(中央レジストリ+個別仕様書)
- 全プラグインにnyash_box.tomlテンプレート追加
- プラグイン優先機能(NYASH_USE_PLUGIN_BUILTINS=1)文書化
- ビルトインBox削除準備(ChatGPT5実装中)
- ネイティブビルドデモ追加(Linux/Windows動作確認済み)

Everything is Box → Everything is Plugin への歴史的転換!
開発20日目にしてビルトインBox全削除という革命的決定。

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-30 01:33:52 +09:00
parent 15e0a1ab34
commit 1b98f85df9
34 changed files with 1410 additions and 62 deletions

View File

@ -125,6 +125,25 @@ cargo build --release
./target/release/plugin-tester check path/to/your/plugin.so
```
### 5. **nyash_box.toml テンプレ & スモーク** 🆕
- テンプレート: `docs/reference/plugin-system/nyash_box.toml.template`
- スモーク実行VM・厳格チェックON:
```bash
bash tools/smoke_plugins.sh
```
- 実行内容: Python デモと Integer デモを `NYASH_PLUGIN_STRICT=1` で起動し、nyash_box.toml 経路のロードと実行を確認
- 事前条件: `cargo build --release --features cranelift-jit` 済み、各プラグインも release ビルド済み
### 6. **プラグイン優先(ビルトイン上書き)設定** 🆕
- 既定では、ビルトインの実装が優先されます(安全第一)。
- プラグインで置き換えたい型ConsoleBox など)がある場合は環境変数で上書き可能:
```bash
export NYASH_USE_PLUGIN_BUILTINS=1
export NYASH_PLUGIN_OVERRIDE_TYPES="ArrayBox,MapBox,ConsoleBox"
```
- 上記により、`new ConsoleBox()` などの生成がプラグイン経路に切替わります。
- 後方互換のため `[libraries]` にも対象プラグインを登録しておくと、解決の一貫性が高まります。
## 🔧 For Nyash Core Developers
### Implementation Files

View File

@ -0,0 +1,31 @@
[box]
name = "<Your Plugin Name>"
version = "0.1.0"
description = "<Short description>"
author = "<Your Name>"
[provides]
boxes = ["<BoxTypeA>", "<BoxTypeB>"]
[<BoxTypeA>]
type_id = <u32>
[<BoxTypeA>.lifecycle]
birth = { id = 0 }
fini = { id = 4294967295 } # optional
[<BoxTypeA>.methods.<methodName>]
id = <u32>
args = [ { name = "<arg>", type = "<string|i64|box|varargs|dict>" } ] # optional
returns = { type = "<void|string|i64|box>", error = "string" } # optional
returns_result = <true|false> # optional: Ok/Err(ResultBox)に正規化
[implementation]
ffi_version = 1
thread_safe = <true|false>
[artifacts]
windows = "target/x86_64-pc-windows-msvc/release/<your>.dll"
linux = "target/release/lib<your>.so"
macos = "target/release/lib<your>.dylib"