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>
4.5 KiB
4.5 KiB
Phase 12(改訂版):Nyashスクリプトプラグイン - 開発支援ツールとして
🎯 現実的な位置づけ
スクリプトプラグインは、JIT/AOT/EXEとは独立した開発支援機能として実装する。
📊 制約と可能性の整理
❌ できないこと(技術的制約)
- MIR/VM/JIT/AOTからのスクリプトプラグイン呼び出し
- スクリプトプラグインのEXE埋め込み
- ネイティブプラグインとの完全な相互運用性
✅ できること(現実的な価値)
- インタープリターモードでの高速プロトタイピング
- 既存プラグインの組み合わせによる新機能開発
- ビルド不要な機能拡張(開発時のみ)
🔄 修正された開発フロー
┌─────────────────┐
│ アイデア/要件 │
└────────┬────────┘
↓
┌─────────────────┐
│ Nyashスクリプト │ ← 高速イテレーション
│ プラグイン作成 │ ビルド不要
└────────┬────────┘
↓
┌─────────────────┐
│ インタープリター│
│ でテスト/検証 │
└────────┬────────┘
↓
性能要求?
↙ ↘
No Yes
↓ ↓
そのまま Rust/Cで
使用 再実装
↓
ネイティブ
プラグイン
↓
JIT/AOT/EXE
📝 実装方針
1. インタープリター専用機能として実装
// script_plugin.ny
export box CustomLogic {
init {
_math = new MathBox() // ネイティブプラグイン利用
_cache = new MapBox()
}
process(data) {
// 複雑なビジネスロジック
// インタープリターでのみ実行
}
}
2. 明確な使用場面の区別
// development.ny(開発時)
local plugin = include("custom_logic.ny") // ✅ OK
// production.ny(本番時)
local plugin = new CustomLogicBox() // ネイティブ版を使用
3. トランスパイル支援ツール(将来)
# Nyashスクリプト → Rustテンプレート生成
nyash-to-rust custom_logic.ny > custom_logic_plugin/src/lib.rs
🎯 価値提案(修正版)
開発者にとっての価値
- 探索的プログラミング - アイデアを即座に試せる
- プロトタイピング - ビルドなしで機能検証
- 学習曲線の緩和 - Rust/C知識不要で拡張開発
エコシステムへの貢献
- アイデアの具現化 - スクリプトで検証→ネイティブで実装
- コミュニティ参加 - より多くの開発者が貢献可能
- ベストプラクティス - 成功パターンの蓄積
🚀 実装計画(現実的版)
Phase 12.1: 基盤構築(2週間)
- export box構文(インタープリター専用)
- include()関数の拡張
- 基本的なプラグインレジストリ
Phase 12.2: 開発体験向上(3週間)
- ホットリロード(開発モード)
- エラーメッセージ改善
- デバッグ支援機能
Phase 12.3: 移行支援(4週間)
- パフォーマンス分析ツール
- Rust変換テンプレート
- 移行ガイドライン
📚 ドキュメント戦略
明確な制約の説明
# Nyashスクリプトプラグイン
⚠️ **重要な制約**
- インタープリターモードでのみ動作
- JIT/AOT/EXEでは使用不可
- 本番環境ではネイティブプラグインへの移行推奨
使用例の充実
- プロトタイピング例
- ネイティブ移行例
- パフォーマンス比較
🎉 期待される成果(現実的版)
短期(3ヶ月)
- 開発効率の向上(プロトタイピング時間80%削減)
- 新規開発者の参入(Rust不要)
- アイデア検証の高速化
中期(1年)
- 成功パターンの確立
- ネイティブプラグインの品質向上
- コミュニティ主導の機能提案増加
結論
スクリプトプラグインは、C ABIの制約を認識した上で、開発支援ツールとして大きな価値を提供できる。
「Everything is Box」の哲学は、実行時の制約はあれど、開発時の自由度として実現される。