2025-09-01 23:44:34 +09:00
|
|
|
|
# 🚨 AI議論の誤解:存在しない問題を解決しようとした記録
|
2025-08-30 22:52:16 +09:00
|
|
|
|
|
2025-09-01 23:44:34 +09:00
|
|
|
|
## 誤解の本質
|
2025-08-30 22:52:16 +09:00
|
|
|
|
|
2025-09-01 23:44:34 +09:00
|
|
|
|
**この文書は、AIたちが「スクリプトプラグイン」という存在しない問題を作り出し、複雑な解決策を提案した記録です。**
|
|
|
|
|
|
|
|
|
|
|
|
### 実際の事実
|
|
|
|
|
|
- Nyashスクリプト = 普通のユーザー定義Box
|
|
|
|
|
|
- ユーザー定義Boxは既に完璧に動作している
|
|
|
|
|
|
- 特別な仕組みは一切不要
|
|
|
|
|
|
|
|
|
|
|
|
## なぜこんな誤解をしたのか
|
|
|
|
|
|
|
|
|
|
|
|
**「プラグイン」という言葉に引っ張られて、C ABIの外部DLLのような特別な仕組みが必要だと思い込んでしまった。**
|
2025-08-30 22:52:16 +09:00
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
現実のフロー:
|
|
|
|
|
|
MIR → JIT → C関数呼び出し(固定アドレス)→ ネイティブコード実行
|
|
|
|
|
|
MIR → AOT → EXE内のC関数(静的リンク)→ ネイティブコード実行
|
|
|
|
|
|
|
|
|
|
|
|
不可能なフロー:
|
|
|
|
|
|
MIR → ??? → Nyashスクリプト実行(インタープリター必要)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## なぜスクリプトプラグインは動作しないのか
|
|
|
|
|
|
|
|
|
|
|
|
### 1. インタープリター依存
|
|
|
|
|
|
```nyash
|
|
|
|
|
|
// スクリプトプラグイン
|
|
|
|
|
|
export box CustomMath {
|
|
|
|
|
|
sin(x) { return me._math.sin(x) }
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
↓
|
|
|
|
|
|
**実行にはNyash VMが必要** → EXEに埋め込めない
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 動的型システム
|
|
|
|
|
|
- C ABI: 静的型(i32, i64, double等)
|
|
|
|
|
|
- Nyashスクリプト: 動的型(Box)
|
|
|
|
|
|
- 型変換にはランタイムが必要
|
|
|
|
|
|
|
|
|
|
|
|
### 3. メモリ管理
|
|
|
|
|
|
- C ABI: 手動管理またはシンプルなGC
|
|
|
|
|
|
- Nyashスクリプト: Arc<Mutex<dyn NyashBox>>
|
|
|
|
|
|
- GC/参照カウント管理にランタイムが必要
|
|
|
|
|
|
|
|
|
|
|
|
## 実例:なぜFileBoxはC ABIなのか
|
|
|
|
|
|
|
|
|
|
|
|
```rust
|
|
|
|
|
|
// FileBoxプラグイン(ネイティブ)
|
|
|
|
|
|
#[no_mangle]
|
|
|
|
|
|
pub extern "C" fn nyash_plugin_invoke(...) -> i32 {
|
|
|
|
|
|
// 直接システムコール可能
|
|
|
|
|
|
// VMなしで動作
|
|
|
|
|
|
// EXEに静的リンク可能
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
対して、Nyashスクリプトは:
|
|
|
|
|
|
- VM必須
|
|
|
|
|
|
- 動的評価
|
|
|
|
|
|
- EXEに埋め込み不可
|
|
|
|
|
|
|
|
|
|
|
|
## 結論:Phase 12の方向転換が必要
|
|
|
|
|
|
|
|
|
|
|
|
### ❌ 不可能なこと
|
|
|
|
|
|
- スクリプトプラグインをJIT/AOTから直接呼び出し
|
|
|
|
|
|
- スクリプトプラグインをEXEに埋め込み
|
|
|
|
|
|
- ネイティブプラグインと完全に透過的な利用
|
|
|
|
|
|
|
|
|
|
|
|
### ✅ 可能なこと
|
|
|
|
|
|
1. **インタープリターモード限定**
|
|
|
|
|
|
- スクリプトプラグインはインタープリター実行時のみ
|
|
|
|
|
|
- 開発/プロトタイピング用途
|
|
|
|
|
|
|
|
|
|
|
|
2. **トランスパイル方式**
|
|
|
|
|
|
- Nyashスクリプト → C/Rust → ネイティブプラグイン
|
|
|
|
|
|
- ビルドステップが必要
|
|
|
|
|
|
|
|
|
|
|
|
3. **ハイブリッド実行**
|
|
|
|
|
|
- 開発時: スクリプトプラグイン(高速イテレーション)
|
|
|
|
|
|
- 本番時: ネイティブプラグイン(高性能)
|
|
|
|
|
|
|
|
|
|
|
|
## 修正された価値提案
|
|
|
|
|
|
|
|
|
|
|
|
### 開発フローの改善
|
|
|
|
|
|
```
|
|
|
|
|
|
1. アイデア → Nyashスクリプトでプロトタイプ
|
|
|
|
|
|
2. 動作確認 → インタープリターでテスト
|
|
|
|
|
|
3. 性能要求 → Rust/Cで再実装
|
|
|
|
|
|
4. 配布 → ネイティブプラグインとして
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 制限事項の明確化
|
|
|
|
|
|
- **JIT/AOT**: ネイティブプラグインのみ
|
|
|
|
|
|
- **インタープリター**: スクリプトプラグインも可
|
|
|
|
|
|
- **EXE生成**: ネイティブプラグインのみ含む
|
|
|
|
|
|
|
|
|
|
|
|
## 推奨アクション
|
|
|
|
|
|
|
|
|
|
|
|
1. **Phase 12の再定義**
|
|
|
|
|
|
- 「開発支援ツール」として位置づけ
|
|
|
|
|
|
- JIT/AOT統合は諦める
|
|
|
|
|
|
|
|
|
|
|
|
2. **ドキュメント修正**
|
|
|
|
|
|
- 制限事項を明確に記載
|
|
|
|
|
|
- 誤解を招く「透過的利用」を削除
|
|
|
|
|
|
|
|
|
|
|
|
3. **代替案の検討**
|
|
|
|
|
|
- Nyash→Rustトランスパイラー
|
|
|
|
|
|
- プラグインテンプレート生成ツール
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**重要な教訓:C ABIの制約は、システムプログラミングの本質的な制約である。**
|