📚 Phase 12: Nyashスクリプトプラグインシステム設計と埋め込みVM構想

## 主な成果
- Nyashスクリプトでプラグイン作成可能という革命的発見
- C ABI制約の分析と埋め込みVMによる解決策
- MIR/VM/JIT層での箱引数サポートの詳細分析

## ドキュメント作成
- Phase 12基本構想(README.md)
- Gemini/Codex先生の技術分析
- C ABIとの整合性問題と解決策
- 埋め込みVM実装ロードマップ
- 箱引数サポートの技術詳細

## 重要な洞察
- 制約は「リンク時にC ABI必要」のみ
- 埋め込みVMでMIRバイトコード実行により解決可能
- Nyashスクリプト→C ABIプラグイン変換が実現可能

Everything is Box → Everything is Plugin → Everything is Possible!
This commit is contained in:
Moe Charm
2025-08-30 22:52:16 +09:00
parent 7a0f9bd432
commit c13d9c045e
82 changed files with 5842 additions and 138 deletions

View File

@ -80,6 +80,55 @@
6) ドキュメント/サンプル更新
- Handle-First のガイドと最小AOT手順の追記。
### 10.5c ドキュメント/サンプル 追加(本スナップショット)
- FFI最小仕様a0/a1/a2, 戻りTLVを短文化: `docs/reference/abi/ffi_calling_convention_min.md`
- birth引数の一般化メモ可変長TLV/例外伝搬): `docs/ideas/new-features/2025-08-30-birth-args-tlv-generalization.md`
- Python最小チェーンの追加:
- VM: `examples/py_min_chain_vm.nyash`
- AOT: `examples/aot_py_min_chain.nyash`
### 10.5d AOT統合 仕上げ(今回)
- ガイド追加: `docs/guides/build/aot_quickstart.md`CLI/スクリプト/内部フロー/FAQ
- by-nameシム整理: nyrtの `nyash_plugin_invoke_name_{getattr,call}_i64` をFFI要約へ反映
- スモーク更新: `tools/smoke_aot_vs_vm.sh` に Python最小チェーンを追加VM側は `NYASH_PY_AUTODECODE=1`
- 今後: nyrtシムのTLV拡充bytes/N引数、Windowsのプラグイン探索微調整
### 10.5e 小仕上げ(今回)
- nyrtシム TLV拡充: BufferBox→bytes(tag=7) 自動エンコード、3引数目以降はレガシー引数からTLVに詰める暫定N引数対応
- Windows探索調整: EXE起動時に PATHへexe/`plugins/`を追加、`PYTHONHOME` 未設定時は `exe\python` を自動採用存在時。相対PYTHONHOMEはexe基準に正規化
### 次フェーズ: 10.6Thread-Safety / Scheduler
- 計画: docs/development/roadmap/phases/phase-10.6/PLAN.txt新規
- 10.6a 監査: Array/Map/Buffer/NyashRuntime/Scheduler の共有戦略Arc+RwLock/Mutexを確認し、未整備箇所をTODO化
- 10.6b スケジューラ: SingleThreadScheduler を Safepoint で `poll()` 連携(観測: `NYASH_SCHED_DEMO/TRACE/POLL_BUDGET`
- 10.6c 並列GC設計: per-thread roots / safepoint協調 / カードマーキングの段階導入メモ確定
### 橋渡し: 10.7 Python Nativeトランスパイル / All-or-Nothing
- 方針と計画: docs/development/roadmap/phases/phase-10.7/PLAN.txt新規
- 二本立て明確化: 実行系現行PyRuntimeBoxと トランスパイル系Python→Nyash→MIR→AOTを併走。自動フォールバック無し
- サブフェーズ: C1 Parser1週→ C2 Compiler Core2週→ C3 CLI配線3日→ C4 テスト(並行)
- 既存導線の活用: 生成Nyashは既存 `--compile-native` でAOT化Strict
### Nyash-only パイプライン(作業場 / 最小導線)
- 目的: すべてNyashで書き、即実行・即修正できる足場を先に用意
- 追加ファイル: tools/pyc/
- PythonParserNy.nyashPyRuntimeBox経由で ast.parse/dump。NYASH_PY_CODE を参照)
- PyIR.nyashIR最小ヘルパ/ PyCompiler.nyashNyash側コンパイラ骨組み/ pyc.nyashエントリ
- Parser/Compiler Rustプラグインは雛形として併存将来削減。当面はNyash実装を優先
### 次の順番(小粒で進める)
1) Parser JSON→IR 変換の最小実装def/return。tools/pyc/PyCompiler.nyash に追加env NYASH_PY_CODE を Pythonで解析→IR生成
2) IR→Nyash 生成の最小拡張Return定数→Return文字列/数値に対応、If/Assignは後続
3) All-or-NothingのStrictスイッチunsupported_nodes 非空ならErr。開閉はenvで制御
4) CLI隠しフラグ `--pyc/--pyc-native` を追加し、Parser→Compiler→AOT を一本化内部で現行AOTを使用
5) サンプル/回帰: tools/pyc の最小ケースをVM/AOTで回し、差分を記録
### Python AOTサンプルの追加最小
- `examples/aot_py_min_chain.nyash`import→getattr→call
- `examples/aot_py_result_ok.nyash`returns_result: Ok
- `examples/aot_py_result_err.nyash`returns_result: Err
- kwargs暫定ブリッジenv eval + **dict: `examples/aot_py_eval_kwargs_env.nyash`
## 🔧 実行方法(再起動手順)
```bash
cargo build --release --features cranelift-jit