156 lines
4.6 KiB
Markdown
156 lines
4.6 KiB
Markdown
|
|
# Python → NyIR 革命 - 箱に被せてVM/ネイティブ/WASM
|
|||
|
|
|
|||
|
|
作成日: 2025-08-27
|
|||
|
|
Status: 構想段階
|
|||
|
|
Priority: High
|
|||
|
|
Related: ChatGPT5との共同構想
|
|||
|
|
|
|||
|
|
## 🎯 ビジョン
|
|||
|
|
|
|||
|
|
**PythonをBoxで包んで、GCオン/オフ切替可能、GIL不要、VM/ネイティブ/WASM全部で動く世界**
|
|||
|
|
|
|||
|
|
既存のPythonコンパイラが解決できなかった問題を「Everything is Box」で根本解決。
|
|||
|
|
|
|||
|
|
## 🚀 三段ロケット構想
|
|||
|
|
|
|||
|
|
### 1️⃣ ブリッジ層(今すぐ動く)
|
|||
|
|
```nyash
|
|||
|
|
// CPythonを"箱で包む"
|
|||
|
|
ForeignBox<PyObject> // PyObjを不透明ハンドルで保持
|
|||
|
|
ProxyBox // GIL・イベントループはバス越しで処理
|
|||
|
|
ny_py_host // C-ABI: ny_py_call/finalize/pin/unpin
|
|||
|
|
|
|||
|
|
// fini ↔ CPython finalizerを相互接続(二重解放防止)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2️⃣ 部分コンパイル層(静的部分をNyIRへ)
|
|||
|
|
```python
|
|||
|
|
@ny_static # 型固定アノテーション
|
|||
|
|
def calculate(numbers: List[float]) -> float:
|
|||
|
|
total = 0.0
|
|||
|
|
for n in numbers:
|
|||
|
|
total += n * n
|
|||
|
|
return total
|
|||
|
|
```
|
|||
|
|
↓
|
|||
|
|
```nyash
|
|||
|
|
// NyIRに変換 → VM/Cranelift/WASMで実行
|
|||
|
|
function calculate(numbers) {
|
|||
|
|
local total = 0.0
|
|||
|
|
local i = 0
|
|||
|
|
loop(i < numbers.length()) {
|
|||
|
|
total = total + numbers.get(i) * numbers.get(i)
|
|||
|
|
i = i + 1
|
|||
|
|
}
|
|||
|
|
return total
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3️⃣ トレースJIT層(ホット部自動最適化)
|
|||
|
|
- CPython実行をプロファイル
|
|||
|
|
- ホットトレースだけNyIR生成
|
|||
|
|
- CraneliftでJIT(PyPy風だが後段はNyIR)
|
|||
|
|
|
|||
|
|
## 📊 既存Pythonコンパイラとの決定的違い
|
|||
|
|
|
|||
|
|
| 既存 | Nyash+Python |
|
|||
|
|
|------|-------------|
|
|||
|
|
| GC必須(参照カウント+GC) | **GCオン/オフ切替可能** |
|
|||
|
|
| GIL必須で真の並列困難 | **SyncBoxでGIL不要並列化** |
|
|||
|
|
| C++変換やPyPy VM限定 | **VM/Cranelift/WASM/LLVM全対応** |
|
|||
|
|
| 言語固有の最適化 | **NyIRで多言語統合基盤** |
|
|||
|
|
|
|||
|
|
## 🏗️ マッピング設計
|
|||
|
|
|
|||
|
|
| Python | Nyash/NyIR |
|
|||
|
|
|--------|-----------|
|
|||
|
|
| int/float/bool/str | Value/IntegerBox/StringBox |
|
|||
|
|
| list/tuple | VecBox(不変は`look`) |
|
|||
|
|
| dict | MapBox |
|
|||
|
|
| class/object | Box(public/privateフィールド) |
|
|||
|
|
| with | `with … {}`(RAII) |
|
|||
|
|
| async/await | ChannelBox/Bus |
|
|||
|
|
| exception | `Throw/Try`(or `Result`) |
|
|||
|
|
|
|||
|
|
反射・動的属性・メタクラスは`ForeignBox<PyObject>`で残してOK。
|
|||
|
|
|
|||
|
|
## 💎 期待される効果
|
|||
|
|
|
|||
|
|
### 性能面
|
|||
|
|
- 数値/ループ/データ処理で**2-20倍高速化**
|
|||
|
|
- GCオフで**リアルタイム性能保証**
|
|||
|
|
- SyncBoxで**真の並列実行**
|
|||
|
|
|
|||
|
|
### 開発面
|
|||
|
|
- **段階導入可能** - 関数単位で移行
|
|||
|
|
- **GCオンで開発** - メモリリーク即検出
|
|||
|
|
- **同一コードで多プラットフォーム** - VM/WASM/ネイティブ
|
|||
|
|
|
|||
|
|
### 革新性
|
|||
|
|
- **言語統合基盤** - Python/JS/Lua全部NyIRへ
|
|||
|
|
- **GCは練習用補助輪** - 本番では不要
|
|||
|
|
- **箱=ライフサイクル** - 統一メモリモデル
|
|||
|
|
|
|||
|
|
## 📅 実装ロードマップ(1週間MVP)
|
|||
|
|
|
|||
|
|
### Day 1-2: ny_py_host(C-ABIブリッジ)
|
|||
|
|
- [ ] call/finalize/pin/unpin実装
|
|||
|
|
- [ ] ForeignBox<PyObject>基盤
|
|||
|
|
|
|||
|
|
### Day 3-4: py-nyc v0(基本構文)
|
|||
|
|
- [ ] def/for/if/return変換
|
|||
|
|
- [ ] int/float/list/dict対応
|
|||
|
|
- [ ] @ny_staticアノテーション
|
|||
|
|
|
|||
|
|
### Day 5-6: 混在実行
|
|||
|
|
- [ ] 関数単位でNyIR or CPython選択
|
|||
|
|
- [ ] ベンチマーク3本作成
|
|||
|
|
|
|||
|
|
### Day 7: Cranelift JIT
|
|||
|
|
- [ ] ホット関数のみコンパイル
|
|||
|
|
- [ ] 性能測定・デモ準備
|
|||
|
|
|
|||
|
|
## 🔧 技術的詳細
|
|||
|
|
|
|||
|
|
### ブリッジ設計
|
|||
|
|
```c
|
|||
|
|
// C-ABI最小セット
|
|||
|
|
ny_py_call(func_id, argc, argv)
|
|||
|
|
ny_py_finalize(obj_id)
|
|||
|
|
ny_py_pin(obj_id) // GC防止
|
|||
|
|
ny_py_unpin(obj_id) // GC許可
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 安全性保証
|
|||
|
|
- **二重解放防止**: fini ↔ finalizer相互接続
|
|||
|
|
- **GIL隔離**: ProxyBox経由でPython処理
|
|||
|
|
- **型安全**: @ny_static領域のみコンパイル
|
|||
|
|
|
|||
|
|
### リスク回避
|
|||
|
|
- **動的機能**: @ny_static外はブリッジ経由
|
|||
|
|
- **C拡張**: 初期はForeignBox、将来NyIR実装
|
|||
|
|
- **GIL**: NyIR部分はGIL非依存で多コア化
|
|||
|
|
|
|||
|
|
## 🎭 デモシナリオ
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 同一ソースを3実行
|
|||
|
|
python calculate.py # CPython
|
|||
|
|
nyash calculate.ny # Nyash VM
|
|||
|
|
nyash --wasm calculate # ブラウザ実行
|
|||
|
|
|
|||
|
|
# 結果: 完全一致 & 速度グラフ表示
|
|||
|
|
# GCオン/オフ切替デモも同時実施
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 💡 世界が驚くポイント
|
|||
|
|
|
|||
|
|
「PythonをVMでもWASMでもRust並速度で動かせる」だけでなく:
|
|||
|
|
|
|||
|
|
**「GCもGILも必須じゃない、Box原理で制御できる」**
|
|||
|
|
|
|||
|
|
つまり:**Pythonコードの見た目のまま、Rustに迫る制御性を後付けできる**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*「箱に被せれば、どの言語もVM/ネイティブ/WASMで走る」- 言語統合基盤の誕生*
|