feat: nyash.toml自動解決とWindows/Python対応

- Windows向け自動ライブラリパス解決(lib接頭辞除去)
- Pythonプラグイン実装改善(evalR/importRメソッド追加)
- nyash.tomlに新[plugins]セクション対応開始
- プラグイン検索パスの柔軟な解決
- AOT設定Box改善とエラーハンドリング強化
- Phase 10.5bドキュメント追加(ネイティブビルド統合計画)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-30 00:08:19 +09:00
parent cdb75dfac1
commit 15e0a1ab34
9 changed files with 196 additions and 41 deletions

View File

@ -0,0 +1,37 @@
# 10.5b ネイティブビルド基盤の固めAOT/EXE
Python統合を本格化する前に、配布可能なネイティブ実行ファイルEXEの足回りを先に完成させる。JITは実行エンジンから外し、EXE生成専用のコンパイラとして運用する。
## 🎯 目的
- VM=実行、JIT=EXEAOTの二系統を明確化フォールバックなし/Fail-Fast
- CLIF→.o→`libnyrt`リンク→EXEのパイプラインを実効化
- プラグイン解決をクロスプラットフォームに(.so/.dll/.dylib、自動lib剥がし、検索パス
- Windowsを含む実用的な配布体験を整備
## 🧩 範囲
- JIT分離・Strict運用Fail-Fast/No-fallback
- AOTパイプライン: `--compile-native``tools/build_aot.{sh,ps1}`
- プラグインローダの拡張: 拡張子変換/`lib`剥がし、`plugin_paths`+`NYASH_PLUGIN_PATHS`
- Windowsリンク: clang優先`nyrt.lib`/`libnyrt.a`両対応、bash+cc fallback
- 観測/EXE出力の統一: `Result: <val>`、終了コード=<val>
## ✅ 成果DoD
- `cargo build --release --features cranelift-jit` の後、
- Linux: `./tools/build_aot.sh examples/aot_min_string_len.nyash -o app && ./app`
- Windows: `powershell -ExecutionPolicy Bypass -File tools\build_aot.ps1 -Input examples\aot_min_string_len.nyash -Out app.exe && .\app.exe`
- プラグインは `.so` 記述でも各OSで自動解決.dll/.dylib へ変換、lib剥がし
- `tools/smoke_aot_vs_vm.sh` で VM/EXE の `Result:` 行比較が可能(差異は警告表示)
## 🔧 実装メモ
- `src/runtime/plugin_loader_v2.rs``resolve_library_path()` を追加:
- OS別拡張子、Windowsの`lib`剥がし、`plugin_paths`探索
- `src/config/nyash_toml_v2.rs``NYASH_PLUGIN_PATHS` を追加(`;`/`:`区切り)
- `AotConfigBox``set_plugin_paths()` 追加env同期
- `crates/nyrt` の EXE出力統一`Result:`/exit code
- Windows: `tools/build_aot.ps1`clang→bash fallback、Linux: `tools/build_aot.sh`
## 📌 次10.5c 以降)
- PyRuntimeBox/PyObjectBoxRO優先
- Python ABIルータを `libnyrt` に同梱type_id→invokeディスパッチ
- 配布用パッケージ整備nyash.toml/プラグイン配置ガイドの最終化)

View File

@ -1,5 +1,5 @@
# Phase 10.5 Python ネイティブ統合Embedding & FFI/ JIT分離EXE専用化
*(旧10.1の一部を後段フェーズに再編。Everything is Plugin/AOT基盤上で実現)*
# Phase 10.5 ネイティブ基盤固め + Python ネイティブ統合
*(旧10.1の一部を後段フェーズに再編。まずネイティブ/AOT基盤を固め、その上でPythonを統合する方針に整理)*
本フェーズでは方針を明確化する実行はVMが唯一の基準系、JITは「EXE/AOT生成専用のコンパイラ」として分離運用する。
@ -12,10 +12,10 @@
- 役割分担の明確化: VM=仕様/挙動の唯一の基準、JIT=ネイティブ生成器。
- プラグイン整合: VM/EXEとも同一のBID/FFIプラグインを利用Everything is Plugin
## 📂 サブフェーズ構成10.5a → 10.5e
## 📂 サブフェーズ構成10.5s → 10.5e
先行タスク(最優先)
- 10.5s JIT Strict/分離の確定Fail-Fast / ノーフォールバック)
- 10.5s JIT Strict/分離の確定Fail-Fast / ノーフォールバック) [DONE]
- 目的: 「VM=実行・JIT=コンパイル」の二系統で混在を排除し、検証を単純化
- 仕様:
- JITは実行経路から外し、`--compile-native`AOTでのみ使用
@ -25,7 +25,7 @@
- CLIに `--compile-native` を追加し、OBJ/EXE生成が一発で通る
- VM実行は常にVMのみJITディスパッチ既定OFF
### 10.5a 設計・ABI整合12日
### 10.5aPython設計・ABI整合12日
- ルート選択:
- Embedding: NyashプロセスにCPythonを埋め込み、PyObject*をハンドル管理
- Extending: Python拡張モジュールnyashrtを提供し、PythonからNyashを呼ぶ
@ -34,7 +34,20 @@
- 変換: Nyash ⇄ Python で Bool/I64/String/Bytes/Handle を相互変換
- GIL: birth/invoke/decRef中はGIL確保。AOTでも同等
### 10.5b PyRuntimeBox / PyObjectBox 実装35日)
### 10.5b ネイティブビルド基盤の固めAOT/EXE24日)
- 目的: Python統合の前に、AOT/EXE配布体験・クロスプラットフォーム実行の足回りを先に完成させる
- 範囲:
- VMとJITの分離JIT=EXE専用とStrict運用の徹底
- AOTパイプラインの実働CLIF→.o→libnyrtリンク→EXE
- プラグイン解決のクロスプラットフォーム化(.so/.dll/.dylib、自動lib剥がし、検索パス
- Windowsビルド/リンクclang優先、MSYS2/WSL fallback
- EXE出力の統一`Result: <val>`)とスモークテスト
- DoD:
- Linux/Windowsで `--compile-native` が通り、`plugins/` のDLL/so/dylibを自動解決
- `tools/build_aot.{sh,ps1}` で配布しやすいEXEが生成される
- `tools/smoke_aot_vs_vm.sh` でVM/EXEの出力照合が可能
### 10.5c PyRuntimeBox / PyObjectBox 実装35日
- `PyRuntimeBox`(シングルトン): `eval(code) -> Handle` / `import(name) -> Handle`
- `PyObjectBox`: `getattr(name) -> Handle` / `call(args...) -> Handle` / `str() -> String`
- 参照管理: `Py_INCREF`/`Py_DECREF` をBoxライフサイクルfiniに接続