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

1.8 KiB
Raw Blame History

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フェーズの戦略は非常に現実的で、リスクが低く、素晴らしいです。