Files
hakorune/docs/development/roadmap/phases/phase-12/archive/gemini-analysis-script-plugins.md
Moe Charm 11506cee3b Phase 11-12: LLVM backend initial, semantics layer, plugin unification
Major changes:
- LLVM backend initial implementation (compiler.rs, llvm mode)
- Semantics layer integration in interpreter (operators.rs)
- Phase 12 plugin architecture revision (3-layer system)
- Builtin box removal preparation
- MIR instruction set documentation (26→Core-15 migration)
- Cross-backend testing infrastructure
- Await/nowait syntax support

New features:
- LLVM AOT compilation support (--backend llvm)
- Semantics layer for interpreter→VM flow
- Tri-backend smoke tests
- Plugin-only registry mode

Bug fixes:
- Interpreter plugin box arithmetic operations
- Branch test returns incorrect values

Documentation:
- Phase 12 README.md updated with new plugin architecture
- Removed obsolete NYIR proposals
- Added LLVM test programs documentation

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-01 23:44:34 +09:00

4.3 KiB
Raw Blame History

Gemini先生の分析Nyashスクリプトプラグインシステム

技術的妥当性評価

結論:極めて実現可能性は高く、技術的にも非常に妥当

このアプローチは、多くのモダンな言語やエンジンLua, JavaScript/Node.js, Pythonなどで採用されている「ネイティブコアとスクリプト拡張」という実績あるモデルを踏襲しています。

「Everything is Box」哲学との整合性

このアプローチは、Boxを「外部から観測可能なインターフェースを持つオブジェクト」と定義するならば、その実装がネイティブRust/C++であろうとスクリプトNyashであろうと区別しない、という哲学の究極的な現れです。

統一インターフェース設計

BoxInterface Traitの提案

// Rust側に、すべてのプラグインが実装すべきtraitを定義
trait BoxInterface {
    fn invoke(&self, method_id: u32, args: NyashValue) -> NyashValue;
    // その他、初期化やメタデータ取得などの共通メソッド
}

アーキテクチャ

[Nyashコード] -> [BoxInterface Trait] --+--> [FFIラッパー] -> [ネイティブコード]
                                        |
                                        +--> [Nyashスクリプトラッパー] -> [Nyash VM実行]

これにより、Nyashのコードからプラグインを利用する側は、相手がネイティブかスクリプトかを一切意識する必要がなくなります。

エコシステムへの影響

開発の民主化

  • 参入障壁の劇的な低下: Rust/C++の環境構築やビルドプロセスが不要
  • 迅速なプロトタイピング: アイデアをすぐにNyashスクリプトで形にし、テスト可能

新しいプラグインの形態

  • プラグインの合成: 複数の既存プラグインを組み合わせて新しい機能を持つ「メタプラグイン」
  • アプリケーションの「設定」としてのプラグイン: ユーザーが自身のアプリケーションの動作をカスタマイズ

動的性の向上

アプリケーションの実行中に、Nyashスクリプトプラグインをリロードしたり、新しいものを追加したりすることが容易になります。

実装ロードマップ

フェーズ1コアランタイムの実現MVP

  1. BoxInterface Traitの設計と実装Rust側
  2. 既存FFIのBoxInterfaceへの対応
  3. NyashオブジェクトのBoxInterface対応
  4. import / export の実装

フェーズ2動的機能と管理

  1. プラグインレジストリの実装
  2. 動的ロード/アンロードAPIの提供
  3. ID管理の洗練

フェーズ3セキュリティと堅牢性

  1. サンドボックスの導入
  2. パフォーマンス分析ツールの提供

フェーズ4開発者体験DXの向上

  1. ドキュメントの整備
  2. LSP/静的解析の対応

他言語からの学び

Lua

  • C APIが非常にクリーンで、Cの関数をLuaから、Luaの関数をCから呼び出すのが容易
  • 学ぶべき点: ネイティブとスクリプト間の境界APIをいかにシンプルで強力に保つか

Node.js (JavaScript)

  • require()システムが、C++で書かれたネイティブアドオンも、JavaScriptで書かれたモジュールも、全く同じように読み込む
  • 学ぶべき点: 統一されたモジュール解決システムとインターフェースの重要性

Python

  • Cで書かれた拡張モジュールと、Pure Pythonで書かれたモジュールが共存
  • 学ぶべき点: パフォーマンスが重要な部分はCで、それ以外は柔軟なPythonで書くという、実用的な使い分け

総括

この発見はNyashの方向性を決定づける重要なマイルストーンです。パフォーマンスが最重要視されるコアな機能はRust/C++のFFIプラグインで、それ以外の大部分の機能、ビジネスロジック、UI、ユーザーカスタマイズなどはNyashスクリプトプラグインで開発する、という美しい棲み分けが実現します。

これはNyashを単なるプログラミング言語から、拡張可能なプラットフォームへと昇華させる可能性を秘めています。