docs: update CURRENT_TASK with Box Theory PHI plan (defer/finalize) and MIR v0.5 type meta; add parity tooling and PyVM scaffolding

impl(pyvm/llvmlite):
- add tools/parity.sh; tools/pyvm_runner.py; src/llvm_py/pyvm/*
- emit string const as handle type in MIR JSON; add dst_type hints
- unify '+' to concat_hh with from_i64/from_i8_string bridges; console print via to_i8p_h
- add runtime bridges: nyash.box.from_i64, nyash.string.to_i8p_h

tests:
- add apps/tests/min_str_cat_loop (minimal repro for string cat loop)
This commit is contained in:
Selfhosting Dev
2025-09-14 04:51:33 +09:00
parent 658a0d46da
commit 3e07763af8
49 changed files with 1231 additions and 201 deletions

View File

@ -14,26 +14,26 @@ MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存
4. **エコシステムの自立**: Nyashだけで完結する開発環境
5. **劇的なコード圧縮**: 75%削減で保守性・可読性の革命
## 🚀 実装戦略2025年9月更新
## 🚀 実装戦略2025年9月更新・改定
### Phase 15.2: LLVM層の独立化(実装中)
- **Python/llvmlite実装を正式採用**開発速度10倍、~2400行
- nyash-llvm-compiler crateの分離Rust版も継続
- MIR JSON/バイナリ入力 → ネイティブEXE出力
- プラグイン全方向ビルド戦略(.so/.o/.a同時生成
- 独立したツールとして配布可能
### Phase 15.2: LLVMllvmlite安定化 + PyVM導入
- JIT/Cranelift は一時停止(古い/非対応。Rust/inkwell は参照のみ。
- 既定のコンパイル経路は **Python/llvmlite**harnessのみ
- MIR(JSON) → LLVM IR → .o → NyRTリンク → EXE
- Resolver-only / Sealed SSA / 文字列ハンドル不変 を強化
- 新規: **PyVMPython MIR VM** を導入し、2本目の実行経路を確保
- 最小命令: const/binop/compare/phi/branch/jump/ret + 最小 boxcallConsole/File/Path/String
- ランナー統合: `NYASH_VM_USE_PY=1` で MIR(JSON) を PyVM に渡して実行
- 代表スモークesc_dirname_smoke / dep_tree_min_stringで llvmlite とパリティ確認
### Phase 15.3: Nyashコンパイラ実装
- NyashでNyashパーサー実装800行目標
- AST→MIR変換2500行目標
- **循環依存なし**nyrtがStringBox/ArrayBoxをC ABI経由で提供
- ブートストラップでセルフホスティング達成!
### Phase 15.3: NyashコンパイラMVP後段
- PyVM 安定後、Nyashパーサ/レクサ(サブセット)と MIR ビルダを段階導入
- フラグでRustフォールバックと併存例: `NYASH_USE_NY_COMPILER=1`
- JIT不要、PyVM/llvmlite のパリティで正しさを担保
### Phase 15.4: VM層のNyash化革新的
- MIR解釈エンジンをNyash実装~5000行予想
- 動的ディスパッチMapBoxで13命令処理
- コンパイル不要の即座実行
- デバッグ・開発効率の劇的向上
### Phase 15.4: VM層のNyash化PyVMからの置換
- PyVM を足場に、VMコアを Nyash 実装へ段階移植(命令サブセットから
- 動的ディスパッチで13命令処理を目標に拡張
詳細:[セルフホスティング戦略 2025年9月版](implementation/self-hosting-strategy-2025-09.md)
@ -71,7 +71,7 @@ MIR 13命令の美しさを最大限に活かし、外部コンパイラ依存
この究極のシンプルさにより、直接x86変換も現実的に
### バックエンドの選択肢
#### 1. Cranelift + lld内蔵ChatGPT5推奨
#### 1. Cranelift + lld内蔵保留
- **軽量**: 3-5MB程度LLVMの1/10以下
- **JIT特化**: メモリ上での動的コンパイル
- **Rust統合**: 静的リンクで配布容易
@ -173,18 +173,15 @@ box TemplateStitcher {
## 🔗 EXEファイル生成・リンク戦略
### 統合ツールチェーン
### 統合ツールチェーン(現状)
```bash
# Cranelift版一時停止中
nyash build main.ny --backend=cranelift --target=x86_64-pc-windows-msvc
# LLVM版ChatGPT5実装中
nyash build main.ny --backend=llvm --emit exe -o program.exe
nyash build main.ny --backend=llvm --emit exe -o program.exe # llvmlite/harness 経路
NYASH_VM_USE_PY=1 nyash run main.ny --backend=vm # PyVMMIR JSON を実行)
```
### 実装戦略
#### LLVM バックエンド(優先)
#### LLVM バックエンド(優先・llvmlite
1. **MIR→LLVM IR**: MIR13をLLVM IRに変換✅ 実装済み)
2. **LLVM IR→Object**: ネイティブオブジェクトファイル生成(✅ 実装済み)
3. **Python/llvmlite実装**: Resolver patternでSSA安全性確保✅ 実証済み)
@ -233,10 +230,10 @@ ny_free_buf(buffer)
## 📅 実施時期(修正版)
- **現在進行中**2025年9月
- Python/llvmlite実装でブレークスルー
- dep_tree_min_string.nyashオブジェクト生成成功
- **Phase 15.2**: LLVM独立化2025年9-10月完成予定
- **Phase 15.3**: Nyashコンパイラ2025年11-12月
- Python/llvmlite既定Craneliftは停止
- PyVMPython MIR VM導入・代表スモークで llvmlite とパリティ確認
- **Phase 15.2**: llvmlite安定化 + PyVM最小完成2025年9-10月
- **Phase 15.3**: NyashコンパイラMVP2025年11-12月
- **Phase 15.4**: VM層Nyash化2026年1-3月
- **Phase 15.5**: ABI移行LLVM完成後、必要に応じて
@ -277,4 +274,4 @@ ny_free_buf(buffer)
- ✅ LLVM dominance違反解決Resolver pattern
- 🚀 Python/llvmliteでEXE生成パイプライン完成
- 📝 nyash-llvm-compiler分離設計
- 📝 NyashパーサーMVP実装開始
- 📝 NyashパーサーMVP実装開始

View File

@ -1,10 +1,10 @@
# Phase 15 推奨進行順(JIT優先・自己ホスティング最小)
# Phase 15 推奨進行順(llvmlite+PyVM 優先・自己ホスティング最小)
更新日: 2025-09-05
## 方針(原則)
- JITオンリー(Cranelift)で前進。LLVM/AOT・lld系は後段にスライド
- JIT/Cranelift は停止。LLVMllvmliteと PyVM の2経路で前進
- 最小自己ホスト体験を早期に成立 → ドキュメント/スモーク/CIを先に固める。
- using名前空間はゲート付きで段階導入。NyModulesとny_pluginsの基盤を強化。
- tmux + codex-async を使い、常時2本並走で小粒に積み上げる。
@ -25,18 +25,17 @@
**完了基準:**
- env.modules.get("acme.logger") などが取得可能、LIST_ONLY/Fail-continue維持、予約拒否ログが出る。
### 2) 最小コンパイラ経路JIT
### 2) 最小VMPyVM
**要点:**
- パーサ/レクサのサブセット: ident/literals/let/call/return/if/block
- Nyash から呼べる MIR ビルダ(小さなサブセット)
- VM/JIT ブリッジを通して apps/selfhost-minimal が走る
- MIR(JSON) を Python VMPyVMで実行。最小命令 + 最小 boxcallConsole/File/Path/String
- ランナー統合(`NYASH_VM_USE_PY=1`)→ 代表スモークが llvmlite と一致
**スモーク/CI:**
- tools/jit_smoke.sh, tools/selfhost_vm_smoke.sh
- tools/compare_harness_on_off.shハーネス、compare_vm_vs_harness.shPyVM vs llvmlite
**完了基準:**
- ./target/release/nyash --backend vm apps/selfhost-minimal/main.nyash が安定実行し、CIでJITスモーク合格
- esc_dirname_smoke / dep_tree_min_string が PyVM と llvmlite で一致
### 3) usingゲート付き設計・実装15.2/15.3
@ -145,4 +144,4 @@ cargo build --release --features cranelift-jit
## 備考
本シーケンスは `docs/development/roadmap/phases/phase-15/self-hosting-plan.txt` を尊重しつつ、JIT最小体験を優先させるため順序を最適化LLVM/lld と YAML自動生成は後段へスライド。進捗に応じて適宜見直し、CI/スモークで常時検証する。
本シーケンスは `docs/development/roadmap/phases/phase-15/self-hosting-plan.txt` を尊重しつつ、JIT最小体験を優先させるため順序を最適化LLVM/lld と YAML自動生成は後段へスライド。進捗に応じて適宜見直し、CI/スモークで常時検証する。