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