feat: Phase 10.5 Python統合プラグインとAOTビルド対応
- Pythonプラグイン(PyRuntimeBox/PyObjectBox)を追加 - eval, import, getattr, call, callKw, strメソッド実装 - math.sqrtデモ等のサンプルコード追加 - AOTビルドサポート追加 - libnyrtランタイムライブラリ - build_aot.shビルドスクリプト - .gitignore改善 - JSONLとDOTファイル除外 - プラグインのビルド成果物除外 - 不要ファイル削除 - nekocode-temp, zenn_articles - 一時的なログファイル類 Phase 10.1の新計画に基づいて、プラグインBox統一化を推進
This commit is contained in:
@ -21,14 +21,14 @@ Phase 10.10 は完了(DoD確認済)。**重大な発見**:プラグイン
|
||||
- JitPolicyBox(allowlist/presets)/ HostCallのRO運用(events連携)
|
||||
- CIスモーク導入(runtime/compile-events)/ 代表サンプル整備
|
||||
- 🔧 Doing(Phase 10.1 新計画)
|
||||
- ArrayBoxのプラグイン化PoC開始
|
||||
- JIT lowering層の統一設計
|
||||
- NewBox→birthのJIT lowering(String/Integer、handleベース)
|
||||
- AOT最小EXE: libnyrt.aシム + ny_main ドライバ + build_aot.sh 整備
|
||||
- リファクタリング作業は継続(core_hostcall.rs完了)
|
||||
- ⏭️ Next(Phase 10.1 実装)
|
||||
- Week1: ArrayBoxプラグイン化と性能測定
|
||||
- Week2: 主要ビルトインBoxの移行
|
||||
- Week3: スタティックリンク基盤構築
|
||||
- Week4: EXE生成実証
|
||||
- Week1: 主要ビルトインBoxの移行(RO中心)
|
||||
- Week2: 静的同梱基盤の設計(type_id→nyplug_*_invoke ディスパッチ)
|
||||
- Week3: ベンチ/観測性整備(JIT fallback理由の粒度)
|
||||
- Week4: AOT配布体験の改善(nyash.toml/soの探索・ガイド)
|
||||
|
||||
## リファクタリング計画(機能差分なし)
|
||||
1) core_hostcall 分割(イベントlower+emit_host_call周辺)
|
||||
@ -60,6 +60,29 @@ Phase 10.10 は完了(DoD確認済)。**重大な発見**:プラグイン
|
||||
- 参照: `docs/development/roadmap/phases/phase-10.5/` (移動済み)
|
||||
- ChatGPT5の当初計画を後段フェーズへ
|
||||
|
||||
### 進捗(10.5a→10.5b 最小実装)
|
||||
- 新規: `plugins/nyash-python-plugin/` 追加(ABI v1、動的 `libpython3.x` ローダ)
|
||||
- Box: `PyRuntimeBox(type_id=40)`, `PyObjectBox(type_id=41)` を `nyash.toml` に登録
|
||||
- 実装: `birth/fini`(Runtime), `eval/import`(Handle返却), `getattr`(Handle返却), `call`(int/string/bool/handle対応) `callKw`(kwargs対応・key:stringと値のペア) , `str`(String返却)
|
||||
- 設計ドキュメント: `docs/development/roadmap/phases/phase-10.5/10.5a-ABI-DESIGN.md`
|
||||
|
||||
### ビルド/テスト結果(2025-08-29)
|
||||
- ✅ Pythonプラグインビルド成功(警告ありだが動作問題なし)
|
||||
- ✅ 本体ビルド成功(Cranelift JIT有効)
|
||||
- ✅ プラグインロード成功(`libnyash_python_plugin.so` 初期化OK)
|
||||
- ✅ `PyRuntimeBox.birth()` 正常実行(instance_id=1)
|
||||
- ✅ VM側委譲: `PluginBoxV2` メソッドを `PluginHost.invoke_instance_method` に委譲(BoxCallでも実体plugin_invoke実行)
|
||||
- ✅ E2Eデモ: `py.import("math").getattr("sqrt").call(9).str()` がVM経路で実行(`examples/py_math_sqrt_demo.nyash`)
|
||||
|
||||
### 方針決定(Built-inとの関係)
|
||||
- いまはビルトインBoxを削除しない。余計な変更を避け、プラグイン優先の運用で干渉を止める。
|
||||
- 例・テスト・CIをプラグイン経路に寄せ、十分に安定してから段階的に外す。
|
||||
|
||||
### 次アクション(小さく通す)
|
||||
1) Loaderのエンコード強化(v2): Bool/F64/Bytes(Array<u8>)を正式サポート → kwargsや一般引数を堅牢化
|
||||
2) 戻り値自動デコード(オプトイン): `NYASH_PY_AUTODECODE=1` 設計(数値/文字列/bytesのTLV変換)。段階的に導入。
|
||||
3) 例外のResult化: returns_resultの扱い整理(成功文字列とエラー文字列の判別手段の仕様化)
|
||||
|
||||
## すぐ試せるコマンド(現状維持の確認)
|
||||
```bash
|
||||
# Build(Cranelift込み推奨)
|
||||
@ -88,6 +111,38 @@ NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/array_plugin_de
|
||||
NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/array_plugin_set_demo.nyash
|
||||
NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/map_plugin_ro_demo.nyash
|
||||
|
||||
# Python plugin demo(Phase 10.5)
|
||||
(cd plugins/nyash-python-plugin && cargo build --release)
|
||||
NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/py_eval_demo.nyash
|
||||
# 追加デバッグ(TLVダンプ)
|
||||
NYASH_DEBUG_PLUGIN=1 NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/py_eval_demo.nyash
|
||||
|
||||
# math.sqrtデモ(import→getattr→call→str)
|
||||
NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/py_math_sqrt_demo.nyash
|
||||
|
||||
# kwargsデモ(builtins.int)
|
||||
NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/py_kw_round_demo.nyash
|
||||
|
||||
# kwargsデモ(builtins.int)
|
||||
NYASH_CLI_VERBOSE=1 ./target/release/nyash --backend vm examples/py_kw_round_demo.nyash
|
||||
|
||||
## AOT最小EXE(New!)
|
||||
```bash
|
||||
# 1) .o生成(Cranelift必須)
|
||||
NYASH_AOT_OBJECT_OUT=target/aot_objects \
|
||||
NYASH_USE_PLUGIN_BUILTINS=1 NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 \
|
||||
./target/release/nyash --backend vm examples/aot_min_string_len.nyash
|
||||
|
||||
# 2) libnyrtビルド + リンク + 実行(Linux例)
|
||||
(cd crates/nyrt && cargo build --release)
|
||||
cc target/aot_objects/main.o -L crates/nyrt/target/release \
|
||||
-Wl,--whole-archive -lnyrt -Wl,--no-whole-archive -lpthread -ldl -lm -o app
|
||||
./app
|
||||
|
||||
# 3) ワンコマンド
|
||||
bash tools/build_aot.sh examples/aot_min_string_len.nyash -o app
|
||||
```
|
||||
|
||||
## ⏭️ Next(Phase 10.2: JIT実呼び出しの実体化)
|
||||
- 目的: Craneliftの `emit_plugin_invoke` を実装し、JITでも実体のプラグインAPIを呼ぶ
|
||||
- 方針:
|
||||
|
||||
Reference in New Issue
Block a user