Files
hakorune/docs/development/roadmap/phases/phase-10.5/README.md
Moe Charm 1eee62a8ea feat(jit): JIT Strictモード実装とプラグイン経路の安定化
- InvokePolicy/Observe導入でLowererの分岐をスリム化
- ArrayBox/MapBox/StringBoxのプラグイン経路統一
- 特殊コメント機能(@jit-debug, @plugin-builtins, @jit-strict)実装
- 型ヒント伝搬パス(TypeHintPass)を独立モジュール化
- VM→Plugin引数整合の安定化(I64統一、IntegerBox自動プリミティブ化)
- StringBoxのpost-birth初期化(空文字列セグフォルト修正)
- JIT観測サンプル追加(Array/Map/String)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-29 21:39:47 +09:00

74 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 10.5 Python ネイティブ統合Embedding & FFI/ JIT Strict 化の前倒し
*(旧10.1の一部を後段フェーズに再編。Everything is Plugin/AOTの基盤上で実現)*
NyashとPythonを双方向に“ネイティブ”接続する前に、JITの開発・検証効率を最大化するため、VM=仕様/JIT=高速実装 という原則に沿った「JIT Strict モード」を前倒し導入し、フォールバック起因の複雑性を排除する。
## 📂 サブフェーズ構成10.5a → 10.5e
先行タスク(最優先)
- 10.5s JIT Strict モード導入Fail-Fast / ノーフォールバック)
- 目的: 「VMで動く正。JITで動かないJITのバグ」を可視化、開発ループを短縮
- 仕様:
- // @jit-strict または NYASH_JIT_STRICT=1 で有効化
- Lowerer: unsupported>0 の場合はコンパイルを中止(診断を返す)
- 実行: JIT_ONLY と併用時はフォールバック禁止(失敗は明示エラー)
- シム: 受け手解決は HandleRegistry 優先。param-index 互換経路は無効化
- DoD:
- Array/Map の代表ケースで Strict 実行時に compile/runtime/シムイベントの整合が取れる
- VM=JIT の差が発生したときに即座に落ち、原因特定がしやすい(フォールバックに逃げない)
### 10.5a 設計・ABI整合12日
- ルート選択:
- Embedding: NyashプロセスにCPythonを埋め込み、PyObject*をハンドル管理
- Extending: Python拡張モジュールnyashrtを提供し、PythonからNyashを呼ぶ
- ABI方針:
- ハンドル: TLV tag=8type_id+instance_id。Pythonオブジェクトは `PyObjectBox` として格納
- 変換: Nyash ⇄ Python で Bool/I64/String/Bytes/Handle を相互変換
- GIL: birth/invoke/decRef中はGIL確保。AOTでも同等
### 10.5b 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に接続
- プラグイン化: `nyash-python-plugin`cdylib/staticlib`nyplug_python_invoke` を提供(将来の静的同梱に対応)
### 10.5c 境界の双方向化35日
- Nyash→Python: BoxCall→plugin_invokeでCPython C-APIに橋渡し
- Python→Nyash: `nyashrt`CPython拡張`nyash.call(func, args)` を提供
- エラーハンドリング: 例外は文字列化tag=6でNyashに返却、またはResult化
### 10.5d JIT/AOT 統合35日
- JIT: `emit_plugin_invoke` で Pythonメソッド呼びを許可ROから開始
- AOT: libnyrt.a に `nyash.python.*` シムbirth_hなどを追加し、ObjectModuleの未解決を解決
- 静的同梱経路: `nyrt` に type_id→`nyplug_python_invoke` ディスパッチテーブルを実装(または各プラグイン名ごとのルータ)。第一段は動的ロード優先
### 10.5e サンプル/テスト/ドキュメント1週間
- サンプル: `py.eval("'hello' * 3").str()``numpy`の軽量ケースimport/shape参照などRO中心
- テスト: GILの再入・参照カウントリーク検知・例外伝搬・多プラットフォーム
- ドキュメント: 使用例、制約GIL/スレッド、AOT時のリンク・ランタイム要件
## 🎯 DoD定義
- NyashからPythonコードを評価し、PyObjectをHandleで往復できる
- 代表的なプロパティ取得/呼び出しROがJIT/VMで動作
- AOTリンク後のEXEで `py.eval()` 代表例が起動できる(動的ロード前提)
- 10.5s Strict: VM=仕様/JIT=高速実装の原則に基づき、フォールバック無しで fail-fast が機能
## ⌛ 目安
| サブフェーズ | 目安 |
|---|---|
| 10.5a 設計 | 12日 |
| 10.5b 実装 | 35日 |
| 10.5c 双方向 | 35日 |
| 10.5d JIT/AOT | 35日 |
| 10.5e 仕上げ | 1週間 |
## ⚠️ リスクと対策
- GILデッドロック: 入口/出口で厳格に確保/解放。ネスト呼び出しの方針を文書化
- 参照カウント漏れ: BoxライフサイクルでDECREFを必ず実施、リークテストを追加
- リンク/配布: Linux/macOS優先。WindowsのPythonリンクは後段で対応
- 性能: RO先行でJITに寄せ、ミューテーションはポリシー制御
---
次は 10.5a設計・ABI整合から着手。Everything is Plugin / libnyrt シムの成功パターンをPythonにも適用し、最小リスクで“Pythonネイティブ”を実現する。