Files
hakorune/docs/archive/gemini_dynamic_library_advice.md
Moe Charm 1493ad7e94 cleanup: Remove temporary file ExternCall test code
- Remove file static box from stdlib/mod.rs
- Remove file.read/write/exists ExternCall handling from MIR builder
- Delete test_file_ffi.nyash test file
- Clean build successful
2025-08-17 03:50:06 +09:00

43 lines
1.8 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.

# Gemini先生のビルトインBox動的ライブラリ化アドバイス
2025-08-17
## 質問への回答
### 1. Rustで最も安定した動的ライブラリ実装方法は
現時点で最も安定し、枯れている方法は**C ABI (`#[repr(C)]`, `extern "C"`) を利用する方法**です。
- **理由:** C ABIはあらゆる言語とプラットフォームでサポートされている、事実上の標準
- **実装:** `#[no_mangle]``extern "C"` を付け、`libloading` クレートを使用
### 2. `abi_stable` crateは本番環境で信頼できるか
**はい、信頼できる選択肢です。** ただし、まずはC ABIで実装し、制約が問題になったら移行を検討。
### 3. プラグイン間の依存関係管理のベストプラクティスは?
**原則として、プラグイン間の直接的な依存は避けるべき。**
- 疎結合の維持: 各プラグインは`nyash-core`とのみ通信
- シンボル名の衝突回避: プラグイン名をプレフィックスに
### 4. セキュリティ(信頼できないプラグイン)の考慮は必要か?
**はい、絶対に必要です。**
- サンドボックス: WASM実行モードを残す
- 権限モデル: Capability-based security
- 署名検証: 将来的に暗号署名
### 5. 実装の落とし穴や注意点は?
- **メモリ管理:** 最大の落とし穴
- 所有権のルールを明確に
- データ生成側が解放関数も提供
- **`Arc<RwLock<T>>`の直接共有は不可能**
- ハンドルパターンを使用
- **エラーハンドリング**
- ステータスコードで返す
## 段階的移行戦略への評価
提案されている4フェーズの戦略は非常に現実的で、リスクが低く、素晴らしいです。