Phase 9.78h: VM BinOp and/or short-circuit + BoxRef<Integer> arithmetic; add diagnostic hooks. Update CURRENT_TASK with progress and VM path-tracing TODO. Align docs: MIR26 canonical spec and phase docs.
This commit is contained in:
@ -163,22 +163,29 @@ Acceptance:
|
||||
|
||||
------------------------------------------------------------
|
||||
|
||||
## 🏆 Phase 10: LLVM Direct AOT - 実現可能性検証中
|
||||
## 🏆 Phase 10: Cranelift JIT(主経路) + LLVM AOT(後段研究)
|
||||
|
||||
Summary:
|
||||
- **調査・実証段階**: MIR→LLVM IR直接変換による最高性能AOT実現を目指す
|
||||
- インタープリターとの併用で最適な開発・実行体験を提供
|
||||
- 非同期処理フルサポート(async/await のネイティブ実装)
|
||||
- **主経路**: MIR→VMを維持しつつ、ホットパスをCraneliftでJIT化して2倍以上の高速化を狙う
|
||||
- **LLVM AOT**: 設計資産は維持しつつ、JIT安定後(Phase 11以降)に検討
|
||||
- **目標**: VMのホットパス(BoxCall/Array/Map)で体感高速化、ベンチで優位性を実証
|
||||
|
||||
Priority: **Research** (Phase 9.8完了後に実現可能性評価)
|
||||
Expected Duration: **調査3週間 + 実装3-6ヶ月**(実現可能性次第)
|
||||
Priority: **High**(Phase 8.6完了直後着手)
|
||||
Expected Duration: **実装6-8週間(段階導入)**
|
||||
|
||||
### 🔍 実現可能性チェック項目
|
||||
- ✅ **技術的基盤**: MIR 26命令セット(LLVM IR変換可能)
|
||||
- ✅ **AOTスケルトン**: 基本構造完成済み
|
||||
- ✅ **型情報システム**: 最適化に必要な情報完備
|
||||
- 🔄 **Proof of Concept**: 基本的なMIR→LLVM変換の実証
|
||||
- ❓ **実装工数**: 現実的な期間での完成可能性
|
||||
### 🚧 Start Gate(着手前の必須完了)
|
||||
- MIRダイエット(26命令)整合完了:Printer/Verifier/Optimizer一致・効果ラベル統一
|
||||
- Loop SSA復帰:Phi/Seal/Pred更新のVerifierチェック合格
|
||||
- TypeOp網羅:is/as/isType/asTypeの早期lowering+Optimizer診断(未lowering検出)
|
||||
- 軽量スナップショット:TypeOp/extern_call/loop/await/boxcallでゴールデン緑
|
||||
- P2PBox再設計(Phase 9.79)完了・E2Eグリーン
|
||||
- CLI分離テスト導線(`cargo test -p core`)安定
|
||||
|
||||
### 🔍 実現可能性チェック項目(Cranelift)
|
||||
- ✅ **技術的基盤**: MIR26整合(TypeOp/WeakRef/Barrier)
|
||||
- ✅ **VM統計**: `--vm-stats` でホット関数抽出可能
|
||||
- 🔄 **Proof of Concept**: MIR→CLIFの最小Lower(算術/比較/分岐)
|
||||
- ❓ **実装工数**: BoxCall/Array/MapのJIT最適化の妥当性
|
||||
|
||||
### 🌟 インタープリター併用戦略
|
||||
```
|
||||
@ -188,54 +195,39 @@ Expected Duration: **調査3週間 + 実装3-6ヶ月**(実現可能性次第
|
||||
Web配布: WASM(ブラウザ対応)
|
||||
```
|
||||
|
||||
### 🏗️ Phase 10.1: Proof of Concept(3週間)**実現可能性評価**
|
||||
### 🏗️ Phase 10.1: Proof of Concept(2週間)
|
||||
|
||||
Investigation Steps:
|
||||
1) **MIR→LLVM IR変換調査**: 基本命令の変換可能性検証
|
||||
2) **Box型表現調査**: LLVM IRでのBox型効率的実装方法
|
||||
3) **C-ABI統合調査**: プラグインとの連携可能性
|
||||
4) **性能予測**: 理論的な高速化効果の算出
|
||||
Steps:
|
||||
1) **JITマネージャ**: プロファイル収集・しきい値設計
|
||||
2) **MIR→CLIF最小Lower**: Const/BinOp/Compare/Branch/Return
|
||||
3) **呼出しABI**: VMとの引数/戻り値・BoxRef受け渡し
|
||||
|
||||
### 🏗️ Phase 10.2: 基本実装(3ヶ月)**実現可能と判断した場合**
|
||||
### 🏗️ Phase 10.2: 基本実装(4週間)
|
||||
|
||||
Implementation Steps:
|
||||
1) `src/backend/llvm/` 基盤構築
|
||||
2) MIR→LLVM IR基本変換
|
||||
3) Box操作の最適化(エスケープ解析)
|
||||
4) ベンチマーク: 100倍目標
|
||||
1) `src/backend/cranelift/` 基盤構築
|
||||
2) MIR→CLIF Lowerの拡充(Call/BoxCall/Array系)
|
||||
3) JIT関数テーブル + VM切替の安定化
|
||||
4) ベンチ: VM比2×目標、BoxCallホットパス優位
|
||||
|
||||
### 🌐 Phase 10.3: 非同期拡張(2ヶ月)**基本実装完了後**
|
||||
|
||||
非同期サポート戦略:
|
||||
- **async/await ネイティブ実装**: Rust風の効率的な非同期
|
||||
- **軽量ランタイム**: 独自Future実装
|
||||
- **インタープリター互換**: 同じ非同期セマンティクス
|
||||
|
||||
```rust
|
||||
// Phase 10.3: 非同期LLVM実装(予定)
|
||||
FutureNew → LLVM coroutine intrinsics
|
||||
Await → LLVM suspend/resume points
|
||||
FutureSet → completion notification
|
||||
```
|
||||
### 🌐 Phase 10.3: 非同期の扱い(最小)
|
||||
- awaitは当面VM側で処理継続(JIT対象外)
|
||||
- JIT関数は同期区間を優先(将来拡張)
|
||||
|
||||
### 技術アプローチ
|
||||
🤖 Copilot協力期待:
|
||||
- **LLVM統合**: MIR→LLVM IR変換基盤
|
||||
- **非同期実装**: coroutine/suspend points
|
||||
- **エスケープ解析**: Box→スタック値最適化
|
||||
- **型特殊化**: コンパイル時型推論・特殊化
|
||||
- **Cranelift統合**: MIR→CLIF Lower
|
||||
- **VMハイブリッド**: JITスイッチ・例外/フォールバック
|
||||
- **ホットパス最適化**: BoxCall/Array/Mapの直結最適化
|
||||
|
||||
### パフォーマンス目標
|
||||
- **同期処理**: 100-1000倍高速化
|
||||
- **非同期処理**: Tokio並みの効率性
|
||||
- **メモリ効率**: Box割当数80%削減
|
||||
- **起動時間**: ネイティブレベル(<10ms)
|
||||
- **同期処理**: VM比 2×以上(段階的に引き上げ)
|
||||
- **起動時間**: 低オーバーヘッド(JIT初回コストを隠蔽)
|
||||
|
||||
### Acceptance Criteria
|
||||
- インタープリターとの完全な互換性
|
||||
- 非同期処理の効率的実装
|
||||
- 1000倍高速化達成(同期処理)
|
||||
- プロダクションレベル最適化
|
||||
- インタープリター/VMとの互換性(結果一致)
|
||||
- ホットパスでの実測高速化(2×)
|
||||
- 回帰テスト・スナップショットの整備
|
||||
|
||||
References:
|
||||
- docs/予定/native-plan/issues/phase_10_x_llvm_backend_skeleton.md
|
||||
@ -464,7 +456,7 @@ Acceptance Criteria:
|
||||
|
||||
## Phase 10以降の展望
|
||||
🚀 **WASM復旧完了** (Phase 9.77): 基本機能の完全動作
|
||||
🚀 **LLVM Direct AOT** (Phase 10): 100-1000倍高速化
|
||||
🚀 **Cranelift JIT** (Phase 10): VM比2×以上の高速化(段階導入)
|
||||
🚀 **非同期ネイティブ実装** (Phase 10.2): async/await完全対応
|
||||
🚀 **インタープリター併用** : 開発・本番両対応
|
||||
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# 🏆 Phase 10: LLVM Direct AOT(最高性能実現)
|
||||
|
||||
Status: Deferred(Cranelift JITをPhase 10の主経路に採用、AOTは後段研究)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
## 📋 Summary
|
||||
MIR→LLVM IR直接変換による最高性能AOT実現。Cranelift JITをスキップし、実用優先戦略でLLVMの強力な最適化を直接活用する。
|
||||
|
||||
|
||||
@ -0,0 +1,62 @@
|
||||
# Phase 10: Cranelift JIT Backend(MIR→VM→Cranelift)
|
||||
|
||||
Status: Planned (Primary path for native speed)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
## 🎯 ゴール
|
||||
- 実行系の主経路を「MIR→VM」を維持しつつ、ホットパスをCraneliftでJIT化して高速化する。
|
||||
- LLVM AOTは後段(Phase 11以降)の研究対象へ繰り延べ。
|
||||
|
||||
## 🔗 位置づけ
|
||||
- これまでの案(MIR→LLVM AOT)を改め、現実的な開発速度と安定性を優先してCranelift JITを先行。
|
||||
- VMとのハイブリッド実行(OSR/ホットカウントに基づくJIT)を採用。
|
||||
|
||||
## 📐 アーキテクチャ
|
||||
```
|
||||
AST → MIR → Optimizer → VM Dispatcher
|
||||
└─(Hot)→ Cranelift JIT (fn単位)
|
||||
```
|
||||
- VMが命令カウント・プロファイルを集計し、しきい値超過関数をJITコンパイル。
|
||||
- JIT済み関数は関数テーブルから直接呼び出し、VMはフォールバック先として維持。
|
||||
|
||||
## 📋 スコープ
|
||||
1) 基盤
|
||||
- JITマネージャ(関数プロファイル・コンパイルキャッシュ)
|
||||
- Craneliftコード生成(MIR→CLIF Lower)
|
||||
- 呼出しABI(Nyash VMスタック/レジスタとのブリッジ)
|
||||
|
||||
2) 命令カバレッジ(段階導入)
|
||||
- Phase A: Const/Copy/BinOp/Compare/Jump/Branch/Return(純関数相当)
|
||||
- Phase B: Call/BoxCall/ArrayGet/ArraySet(ホットパス対応)
|
||||
- Phase C: TypeOp/Ref*/Weak*/Barrier(必要最小)
|
||||
|
||||
3) ランタイム連携
|
||||
- Boxの所有・参照モデルを維持(共有/クローンの意味論を破らない)
|
||||
- 例外・TypeErrorはVMの例外パスへエスケープ
|
||||
|
||||
## ✅ 受け入れ基準(Milestone)
|
||||
- M1: 算術/比較/分岐/returnの関数がJIT化され、VMより高速に実行
|
||||
- M2: Array/Mapの代表操作(get/set/push/size)がJITで安定動作
|
||||
- M3: BoxCallホットパス(特にArray/Map)で有意な高速化(2×目標)
|
||||
- M4: 回帰防止のベンチと`--vm-stats`連携(JITカウント/時間)
|
||||
|
||||
## 🪜 実装ステップ
|
||||
1. JITマネージャ/関数プロファイルの導入(VM統計と統合)
|
||||
2. MIR→CLIF Lower骨子(基本型/算術/比較/制御)
|
||||
3. 呼出しABIブリッジ(引数/戻り値/BoxRefの表現)
|
||||
4. JIT関数テーブル + VMディスパッチ切替
|
||||
5. Array/Map/BoxCallのホットパス最適化
|
||||
6. TypeOp/Ref/Weak/Barrierの必要最小を実装
|
||||
7. ベンチ/スナップショット整備・回帰検出
|
||||
|
||||
## ⚠️ 依存・前提
|
||||
- MIR26整合(TypeOp/WeakRef/Barrierの統合前提)
|
||||
- P2PBox再設計(Phase 9.x)を先に安定化しておく(VM/プラグインE2E維持)
|
||||
|
||||
## 📚 参考
|
||||
- Cranelift: Peepmatic/CLIF、simple_jitの最小例
|
||||
- JIT/VMハイブリッド: LuaJIT/HotSpotのOSR設計
|
||||
|
||||
---
|
||||
備考: LLVM AOTはPhase 11以降の研究路線に移行(設計ドキュメントは維持)。
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# Phase 10: LLVM Backend Skeleton(MIR→LLVM IR AOT 最小実装)
|
||||
|
||||
Status: Deferred(Cranelift JIT先行のため、AOTは後段で検討)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
目的
|
||||
- MIRからLLVM IRへの直接変換と、最小AOTパイプラインを構築するための実装ガイド(Copilot向けタスクリスト)。
|
||||
- Phase 9.7(ABI/BID+ExternCall)を前提に、外部呼び出しの取り扱いも含めて安全に前進。
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# Phase 8.4: AST→MIR Lowering完全実装
|
||||
|
||||
Status: In Progress (builder分割完了、lowering未完)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
## 🎯 Issue概要
|
||||
|
||||
**現在の最重要課題**: Phase 8.3のBox操作WASMが実際にテストできない
|
||||
@ -332,4 +335,4 @@ $HOME/.wasmtime/bin/wasmtime run clean_test.wat --invoke main
|
||||
|
||||
**優先度**: Critical
|
||||
**担当**: Copilot + Claude協調実装
|
||||
**最終目標**: test_wasm_box_integration.nyash が完全動作
|
||||
**最終目標**: test_wasm_box_integration.nyash が完全動作
|
||||
|
||||
@ -1,338 +0,0 @@
|
||||
# Phase 8.5: MIR 25命令完全仕様実装(ChatGPT5 + AI大会議決定版)
|
||||
|
||||
## 🎯 Issue概要
|
||||
|
||||
**最終決定**: AI大会議(Gemini+Codex)+ ChatGPT5先生によるMIR 25命令完全仕様の実装
|
||||
|
||||
**仕様確定**: ChatGPT5先生が「化け物に伸びる余白」と「実装の現実」のちょうど真ん中として設計した、**Nyashのコア価値(所有森+weak+Bus+効果注釈)を無理なくIR化**する完璧な25命令セット
|
||||
|
||||
## 📋 確定版: MIR 25命令完全仕様
|
||||
|
||||
### **Tier-0: 普遍コア(8命令)**
|
||||
```mir
|
||||
Const // 定数値生成(pure)
|
||||
BinOp // 二項演算(pure)
|
||||
Compare // 比較演算(pure)
|
||||
Branch // 条件分岐(control)
|
||||
Jump // 無条件ジャンプ(control)
|
||||
Phi // SSA phi関数(pure)
|
||||
Call // 外部関数呼び出し(context依存)
|
||||
Return // 関数戻り(control)
|
||||
```
|
||||
|
||||
**効果**: 将来のJIT/AOT/WASMすべてで必須の基盤
|
||||
|
||||
### **Tier-1: Nyashセマンティクス(12命令)**
|
||||
```mir
|
||||
NewBox // 強所有のBox生成(所有森のノード)
|
||||
BoxFieldLoad // Boxのフィールド読み(pure)
|
||||
BoxFieldStore // Boxのフィールド書き(mut)
|
||||
BoxCall // Boxのメソッド呼び出し(context依存)
|
||||
Safepoint // 分割finiや割込み許可ポイント(io)
|
||||
RefGet // 参照(強/弱を問わず)を値として取得(pure)
|
||||
RefSet // 参照の差し替え(所有規則検証付き)(mut)
|
||||
WeakNew // weak ハンドル生成(非所有リンク作成)(pure)
|
||||
WeakLoad // weak から生存チェック付きで強参照取得(失効時null)(pure)
|
||||
WeakCheck // weak の生存確認(bool)(pure)
|
||||
Send // Bus送信(io)
|
||||
Recv // Bus受信(io)
|
||||
```
|
||||
|
||||
**革命的価値**: **所有森+weak+Bus** が言語一次市民として表現可能
|
||||
|
||||
### **Tier-2: 実装補助・最適化友好(5命令)**
|
||||
```mir
|
||||
TailCall // 末尾呼び出し(スタック節約)(control)
|
||||
Adopt // 所有移管: this が子を強所有に取り込む(mut)
|
||||
Release // 強所有を解除(weak化 or null化)(mut)
|
||||
MemCopy // 小さなメモリ移動(構造体/配列最適化フック)(mut)
|
||||
AtomicFence // 並行時の順序保証(Actor/Port境界で使用)(io)
|
||||
```
|
||||
|
||||
**位置づけ**: 言語仕様の裏方。無くても表現可能だが、**性能・安全検査・移植性**が安定
|
||||
|
||||
## 🔧 効果(Effect)システム
|
||||
|
||||
### 効果分類と最適化ルール
|
||||
```rust
|
||||
pub enum Effect {
|
||||
Pure, // 再順序化OK、CSE/LICM可能
|
||||
Mut, // 同一Box/同一Fieldで依存保持
|
||||
Io, // 再順序化禁止、副作用あり
|
||||
Control, // 制御フロー変更
|
||||
}
|
||||
```
|
||||
|
||||
### 命令別効果定義
|
||||
- **pure**: Const, BinOp, Compare, Phi, RefGet, WeakNew, WeakLoad, WeakCheck
|
||||
- **mut**: BoxFieldStore, RefSet, Adopt, Release, MemCopy
|
||||
- **io**: Send, Recv, Safepoint, AtomicFence
|
||||
- **control**: Branch, Jump, Return, TailCall
|
||||
- **context依存**: Call, BoxCall(呼び先効果に従属)
|
||||
|
||||
## 🔍 検証(Verifier)要件
|
||||
|
||||
### 所有森検証ルール
|
||||
```rust
|
||||
// 1. 強参照のin-degree制約
|
||||
fn verify_ownership_forest(mir: &MirModule) -> Result<(), VerifyError> {
|
||||
for instruction in mir.instructions() {
|
||||
match instruction {
|
||||
NewBox { dst, .. } => verify_strong_indegree_one(dst)?,
|
||||
Adopt { parent, child, .. } => verify_ownership_transfer(parent, child)?,
|
||||
Release { ref_val, .. } => verify_release_safety(ref_val)?,
|
||||
RefSet { target, new_ref, .. } => verify_refset_safety(target, new_ref)?,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 強循環禁止検証
|
||||
fn verify_no_strong_cycles(mir: &MirModule) -> Result<(), VerifyError> {
|
||||
// 強エッジのみ辿ってDAG(森)であることを確認
|
||||
}
|
||||
|
||||
// 3. weak参照の決定的挙動
|
||||
fn verify_weak_determinism(mir: &MirModule) -> Result<(), VerifyError> {
|
||||
// WeakLoad/WeakCheckの失効時はnull/falseを返す(例外禁止)
|
||||
}
|
||||
```
|
||||
|
||||
### 安全性検証項目
|
||||
- [ ] **所有森**: `strong in-degree ≤ 1`(NewBox/Adopt/Release/RefSetで常時検査)
|
||||
- [ ] **強循環禁止**: 強エッジのみ辿ってDAG(森)であること
|
||||
- [ ] **weak/強相互**: 双方向とも強 → エラー(片側はWeakNew経由で弱化)
|
||||
- [ ] **RefSetの安全**: 強→強の差し替え時は旧所有元からのReleaseが伴うこと
|
||||
- [ ] **WeakLoad/WeakCheck**: 失効時はnull/falseを返す(例外禁止、決定的挙動)
|
||||
- [ ] **TailCall**: 末尾位置のみ可(Return直前)
|
||||
- [ ] **Send/Recv**: at-least-once契約を満たすか、契約を明示
|
||||
|
||||
## 🚀 実装範囲・優先度
|
||||
|
||||
### Phase 8.5A: コア命令実装(最優先)
|
||||
- [ ] **Tier-0完全実装**: 8命令の基盤確立
|
||||
- [ ] **Tier-1 Box操作**: NewBox, BoxFieldLoad/Store, BoxCall
|
||||
- [ ] **Tier-1 weak参照**: WeakNew, WeakLoad, WeakCheck
|
||||
- [ ] **効果システム**: Effect注釈とVerifier基盤
|
||||
|
||||
### Phase 8.5B: 高度機能(重要)
|
||||
- [ ] **所有移管**: Adopt, Release命令実装
|
||||
- [ ] **最適化**: TailCall, MemCopy実装
|
||||
- [ ] **並行制御**: AtomicFence実装
|
||||
- [ ] **Bus操作**: Send, Recv統合
|
||||
|
||||
### Phase 8.5C: 検証・最適化(完成度)
|
||||
- [ ] **Verifier完全実装**: 所有森・strong循環・安全性検証
|
||||
- [ ] **バックエンド対応**: Interpreter/VM/WASM全対応
|
||||
- [ ] **最適化パス**: pure再順序化・mut依存保持・io順序保証
|
||||
|
||||
## 🧪 代表的ロワリング実装例
|
||||
|
||||
### 1. look参照のロワリング
|
||||
```nyash
|
||||
// Nyashソース
|
||||
local weak_ref = look parent.child
|
||||
|
||||
// MIRロワリング
|
||||
%0 = WeakNew %parent_child_ref
|
||||
%1 = WeakLoad %0 // 読み取り時に生存チェック
|
||||
```
|
||||
|
||||
### 2. borrow{}ブロックのロワリング
|
||||
```nyash
|
||||
// Nyashソース
|
||||
borrow parent.field {
|
||||
use_field(parent.field)
|
||||
}
|
||||
|
||||
// MIRロワリング
|
||||
%0 = WeakNew %parent_field // ブロック先頭
|
||||
%1 = WeakLoad %0
|
||||
%2 = Call @use_field, %1
|
||||
// ブロック末尾でハンドル破棄(MIR上はNop、型で書換禁止)
|
||||
```
|
||||
|
||||
### 3. Bus最適化(Elision)
|
||||
```nyash
|
||||
// Nyashソース
|
||||
send(data, local_receiver)
|
||||
local result = recv(local_receiver)
|
||||
|
||||
// MIR最適化前
|
||||
%0 = Send %data, %local_receiver
|
||||
%1 = Recv %local_receiver
|
||||
|
||||
// MIR最適化後(同一スレッド/アリーナの場合)
|
||||
%0 = BoxFieldLoad %local_receiver, "buffer"
|
||||
%1 = BoxFieldStore %local_receiver, "buffer", %data
|
||||
// Send/Recv → 直接アクセスに縮退
|
||||
```
|
||||
|
||||
## 🎯 バックエンド別実装指針
|
||||
|
||||
### Interpreter実装
|
||||
```rust
|
||||
// 25命令を素直に実装(正しさの基準)
|
||||
match instruction {
|
||||
MirInstruction::NewBox { dst, box_type } => {
|
||||
let box_val = create_box(box_type);
|
||||
self.set_value(dst, box_val);
|
||||
},
|
||||
MirInstruction::WeakCheck { dst, weak_ref } => {
|
||||
let is_alive = self.check_weak_alive(weak_ref);
|
||||
self.set_value(dst, Value::Bool(is_alive));
|
||||
},
|
||||
MirInstruction::TailCall { func, args } => {
|
||||
self.prepare_tail_call(func, args);
|
||||
return TailCallResult::Jump;
|
||||
},
|
||||
// ... 他23命令
|
||||
}
|
||||
```
|
||||
|
||||
### VM実装
|
||||
```rust
|
||||
// Register-VM + direct-threading
|
||||
// Send/Recvはローカル判定時にインライン化
|
||||
impl VM {
|
||||
fn execute_send(&mut self, data: RegId, target: RegId) {
|
||||
if self.is_local_target(target) {
|
||||
// ローカル最適化: 直接バッファ書き込み
|
||||
self.local_buffer_write(target, data);
|
||||
} else {
|
||||
// 通常のBus送信
|
||||
self.bus_send(data, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### WASM実装
|
||||
```rust
|
||||
// Send/Recvはhost import、MemCopyはmemory.copyに対応
|
||||
fn compile_mem_copy(&mut self, dst: WasmAddr, src: WasmAddr, size: u32) {
|
||||
self.emit_wasm_instruction(&WasmInstruction::MemoryCopy {
|
||||
dst_offset: dst,
|
||||
src_offset: src,
|
||||
size,
|
||||
});
|
||||
}
|
||||
|
||||
fn compile_send(&mut self, data: ValueId, target: ValueId) {
|
||||
// host importとして実装
|
||||
self.emit_call_import("env.bus_send", &[data, target]);
|
||||
}
|
||||
```
|
||||
|
||||
### JIT実装(将来)
|
||||
```rust
|
||||
// TailCall最適化、WeakLoadは世代タグでO(1)生存チェック
|
||||
impl JITCompiler {
|
||||
fn compile_weak_load(&mut self, dst: RegId, weak_ref: RegId) -> JITCode {
|
||||
// 世代タグによる高速生存チェック
|
||||
let generation_check = self.emit_generation_check(weak_ref);
|
||||
let load_value = self.emit_conditional_load(weak_ref, generation_check);
|
||||
self.emit_store_register(dst, load_value)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🧪 テスト戦略
|
||||
|
||||
### 1. Golden MIR テスト
|
||||
```bash
|
||||
# 各サンプルのMIRダンプが全バックエンドで一致
|
||||
./target/release/nyash --dump-mir test_golden_mir.nyash > golden.mir
|
||||
./target/release/nyash --backend vm --dump-mir test_golden_mir.nyash > vm.mir
|
||||
./target/release/nyash --backend wasm --dump-mir test_golden_mir.nyash > wasm.mir
|
||||
diff golden.mir vm.mir && diff vm.mir wasm.mir
|
||||
```
|
||||
|
||||
### 2. 行動一致テスト
|
||||
```bash
|
||||
# 同入力→同出力(weak失効時のnull/false含む)
|
||||
./target/release/nyash --backend interpreter test_behavior.nyash > interp.out
|
||||
./target/release/nyash --backend vm test_behavior.nyash > vm.out
|
||||
./target/release/nyash --backend wasm test_behavior.nyash > wasm.out
|
||||
diff interp.out vm.out && diff vm.out wasm.out
|
||||
```
|
||||
|
||||
### 3. 性能スモークテスト
|
||||
```bash
|
||||
# 5種の代表ケースで性能継続検証
|
||||
./target/release/nyash --benchmark add_loop.nyash
|
||||
./target/release/nyash --benchmark map_getset.nyash
|
||||
./target/release/nyash --benchmark alloc_free.nyash
|
||||
./target/release/nyash --benchmark bus_local.nyash
|
||||
./target/release/nyash --benchmark bus_actor.nyash
|
||||
|
||||
# 期待値: VMがinterp以上、WASMがVM以上
|
||||
```
|
||||
|
||||
## ✅ 成功基準
|
||||
|
||||
### 必須基準(Phase 8.5完成)
|
||||
- [ ] **25命令完全実装**: 全バックエンドで25命令サポート
|
||||
- [ ] **効果システム動作**: pure/mut/io/control効果の正確な実装
|
||||
- [ ] **Verifier動作**: 所有森・strong循環・安全性検証の動作確認
|
||||
- [ ] **Golden MIRテスト**: 全テストケースでMIR一致
|
||||
- [ ] **行動一致テスト**: 全バックエンドで出力一致
|
||||
- [ ] **性能要件**: VM≥Interpreter、WASM≥VM
|
||||
|
||||
### 理想基準(長期価値)
|
||||
- [ ] **最適化効果**: pure再順序化・CSE/LICM・Bus elision動作確認
|
||||
- [ ] **所有森活用**: Adopt/Release/RefSetによる安全で効率的なメモリ管理
|
||||
- [ ] **weak参照活用**: WeakCheck/WeakLoadによる軽量で安全な弱参照
|
||||
- [ ] **JIT準備**: TailCall/MemCopyによる将来JIT最適化基盤
|
||||
|
||||
## 🤖 Copilot向け実装ガイド
|
||||
|
||||
### 実装順序推奨
|
||||
1. **Tier-0基盤**: 8命令の確実な実装
|
||||
2. **Box操作**: NewBox, BoxFieldLoad/Store(Everything is Box核心)
|
||||
3. **weak参照**: WeakNew, WeakLoad, WeakCheck(循環参照対策)
|
||||
4. **効果システム**: Effect注釈とVerifier統合
|
||||
5. **高度機能**: Adopt/Release, TailCall等
|
||||
6. **テスト**: Golden MIR・行動一致・性能検証
|
||||
|
||||
### 重要な設計原則
|
||||
- **Everything is Box**: BoxFieldLoad/Storeで明確にBox中心設計
|
||||
- **所有森**: strong in-degree ≤ 1を常時保証
|
||||
- **決定的挙動**: WeakLoad/WeakCheckの失効時動作を一貫化
|
||||
- **効果注釈**: 最適化パスの基盤となる正確な効果分類
|
||||
|
||||
### デバッグ支援
|
||||
```bash
|
||||
# MIR命令別実行トレース
|
||||
./target/release/nyash --trace-mir-execution test.nyash
|
||||
|
||||
# 所有森検証
|
||||
./target/release/nyash --verify-ownership-forest test.nyash
|
||||
|
||||
# 効果システム確認
|
||||
./target/release/nyash --dump-mir-effects test.nyash
|
||||
```
|
||||
|
||||
## 📊 期待される効果
|
||||
|
||||
### 技術的効果
|
||||
- **所有森+weak+Bus**のIRレベル実現
|
||||
- JIT/AOT最適化の強固な基盤確立
|
||||
- バックエンド間の実装一貫性向上
|
||||
|
||||
### 開発効率向上
|
||||
- 意味明確なMIRによるデバッグ性向上
|
||||
- 最適化パス開発の大幅な容易化
|
||||
- 長期保守コストの劇的削減
|
||||
|
||||
### パフォーマンス向上
|
||||
- Bus elisionによる通信最適化
|
||||
- pure命令の積極的再順序化
|
||||
- TailCall/MemCopyによる実行効率化
|
||||
|
||||
---
|
||||
|
||||
**優先度**: Critical(Phase 8.4完了直後)
|
||||
**担当**: Copilot + Claude協調実装
|
||||
**仕様策定**: ChatGPT5 + AI大会議(Gemini+Codex)完全一致決定
|
||||
**最終目標**: Nyashコア価値の完璧なIR化実現
|
||||
@ -1,5 +1,8 @@
|
||||
# Phase 8.5: MIR 35→26命令削減プロジェクト(緊急実装)
|
||||
|
||||
Status: In Progress(TypeOp/WeakRef/Barrier統合の整合中)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
## 🚨 **緊急度: Critical**
|
||||
|
||||
**発見日**: 2025年8月17日
|
||||
@ -256,4 +259,4 @@ fn verify_ownership_forest_constraints(mir: &MirModule) -> Result<(), VerifyErro
|
||||
**想定完了**: 2025年8月17日中(本日中)
|
||||
**優先度**: Critical(他全作業に優先)
|
||||
|
||||
**驚異的な進捗**: 当初5週間想定だった作業を1日で90%完了!
|
||||
**驚異的な進捗**: 当初5週間想定だった作業を1日で90%完了!
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# Phase 8.6: VM性能改善実装(緊急修正)
|
||||
|
||||
Status: In Progress(Critical; 0.9×→2×目標)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
## 🚨 Issue概要
|
||||
|
||||
**緊急課題**: VMがインタープリターより性能劣化(0.9倍)している根本問題の解決
|
||||
@ -435,4 +438,4 @@ echo "✅ 全テスト完了"
|
||||
**期間**: 2週間
|
||||
**担当**: Copilot + Claude協調
|
||||
|
||||
この問題解決により、Nyash言語のVM実行性能が飛躍的に向上し、Phase 9 JIT実装への道筋が確立されます 🚀
|
||||
この問題解決により、Nyash言語のVM実行性能が飛躍的に向上し、Phase 9 JIT実装への道筋が確立されます 🚀
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# 🚀 Phase 9.75h-0 Complete: Unified Plugin System Developer Guide
|
||||
# 🚀 Phase 9.75g-0 Complete: Unified Plugin System Developer Guide
|
||||
|
||||
**Completion Date**: 2025-08-18
|
||||
**Status**: ✅ **PRODUCTION READY**
|
||||
@ -404,4 +404,4 @@ Phase 9.75g-0 **perfectly positions** Nyash for Phase 10 (LLVM AOT):
|
||||
**Last Updated**: 2025-08-19
|
||||
**Author**: Claude (AI Assistant)
|
||||
**Review Status**: Ready for Team Review
|
||||
**Confidentiality**: Open Source Development Documentation
|
||||
**Confidentiality**: Open Source Development Documentation
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
# Phase 9.78b: インタープリター・VM統合アーキテクチャ再設計
|
||||
|
||||
Status: Not Started(設計完了、実装未着手)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
**作成日**: 2025-08-21
|
||||
**優先度**: 最高(Phase 9.78aの前提条件)
|
||||
**設計者**: Codex exec (天才的洞察)
|
||||
@ -209,4 +212,4 @@ use core::model::BoxDeclaration as InterpreterBoxDecl;
|
||||
---
|
||||
|
||||
**総工数見積もり**: 14日(各ステップにバッファ含む)
|
||||
**推奨アプローチ**: Step 1-2を先行実施して感触を掴む
|
||||
**推奨アプローチ**: Step 1-2を先行実施して感触を掴む
|
||||
|
||||
@ -0,0 +1,72 @@
|
||||
# Phase 9.78h: MIRパイプライン前提整備(P2P/Cranelift前の全作業)
|
||||
|
||||
Status: In Progress(9.79 P2PBox前のゲート)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
## 🎯 目的
|
||||
P2PBox(Phase 9.79)に着手する前に、MIRパイプライン(Builder/SSA/MIR26/Verifier/Optimizer/VM整合)を完全に安定化し、26命令セットで凍結する。これにより、P2P/Craneliftの土台を強固にする。
|
||||
|
||||
## 📦 スコープ(MIRまわりの全タスク)
|
||||
0) 命令セットの凍結(26命令が正)
|
||||
- 命令セットの単一出典: `docs/reference/mir/INSTRUCTION_SET.md` を唯一の参照に統一
|
||||
- コード側の列挙とテスト: `src/mir/instruction.rs` の列挙と一致、総数26のテストで保証(ドキュメント≧コードではなくコード≡ドキュメント)
|
||||
- 25命令文献はアーカイブへ移動(本流は26命令)
|
||||
1) Builder/Loweringの確定
|
||||
- Builder移行完了: `builder.rs` → `builder_modularized/*`(命令フィールド名・効果一致: `function→func`, `arguments→args`)
|
||||
- Loop SSA復帰: `loop_api` によるPhi挿入・seal・predecessor更新の段階適用、簡易lowering除去
|
||||
- TypeOp早期lowering網羅: `is/as/isType/asType` の関数/メソッド両パスで確実に `TypeOp(Check/Cast)` 生成、`print(isType(...))` 直下もdst化
|
||||
|
||||
2) MIR26命令ダイエットの凍結
|
||||
- TypeOp統合: Check/Castの意味論確定、Printer表示/エフェクト統一
|
||||
- WeakRef/Barrier統合: flag ON/OFFで差分固定(PoC featureで比較可能に)
|
||||
- 命令リストの合意化: 26命令でのPrinter/Verifier/Optimizer整合
|
||||
|
||||
3) Verifier/Printer/Optimizer整合
|
||||
- Verifier: mergeでのphi未使用検知/支配関係、Barrier位置/WeakRef整合のチェック
|
||||
- Printer: `--mir-verbose` で TypeOp/WeakRef/Barrier を明示、`--mir-verbose-effects` で `pure|readonly|side`
|
||||
- Optimizer: 未lowering安全ネット(Call/BoxCall→TypeOp)強化、`NYASH_OPT_DIAG_FAIL=1` で診断をCIゲート化
|
||||
|
||||
4) VM整合(ホットパス健全化)
|
||||
- BinOp: `and`/`or` 実装、BoxRef×BoxRefの数値演算サポート
|
||||
- Compare/Branch: 既定のVoid/Bool/Intセマンティクスを維持、回帰テスト
|
||||
- Array/Map/BoxCall: get/set/push/size のfast-path・identity shareの確認
|
||||
- VM Stats: `--vm-stats`, `--vm-stats-json` の代表ケース更新
|
||||
|
||||
5) スナップショット/CI導線
|
||||
- 軽量スナップショット: TypeOp/extern_call/loop/await/boxcall の含有チェックを代表ケースで固定
|
||||
- ゴールデン比較: `tools/snapshot_mir.sh` + `tools/ci_check_golden.sh` の運用整備
|
||||
- CLI分離テスト: `cargo test -p core` のみで回る構成(CLI変更で止まらない)
|
||||
|
||||
6) ランタイム/API整備
|
||||
- ResultBox移行: `box_trait::ResultBox` → `boxes::ResultBox` へ全面置換、互換層の段階削除
|
||||
- ドキュメント同期: CURRENT_TASK/CLAUDE/phase-docを更新し参照経路を一本化
|
||||
|
||||
## ✅ 受け入れ基準(P2P着手ゲート)
|
||||
- [ ] MIR26整合完了(Printer/Verifier/Optimizer一致・効果表記統一)
|
||||
- [ ] Loop SSA復帰(Phi/Seal/Pred更新がVerifierで合格)
|
||||
- [ ] TypeOp網羅(is/as/isType/asTypeの早期lowering+Optimizer診断ONで回帰ゼロ)
|
||||
- [ ] 軽量スナップショット緑(TypeOp/extern_call/loop/await/boxcall)
|
||||
- [ ] VM未実装の解消(And/Or・BoxRef演算)
|
||||
- [ ] CLI分離テスト導線(`cargo test -p core`)安定
|
||||
- [ ] ResultBox移行完了(旧参照なし)
|
||||
- [ ] 命令セットの単一出典化(INSTRUCTION_SET.md)と総数26のテストがCIで緑
|
||||
|
||||
## 🪜 タスク分解(実行順)
|
||||
1. Builder移行完了(命令フィールド名・効果一致)
|
||||
2. Loop SSA復帰(Phi/Seal/Pred更新の段階適用)
|
||||
3. TypeOp早期loweringの網羅 + Optimizer安全ネットの強化
|
||||
4. MIR26統合(TypeOp/WeakRef/Barrier)とPrinter/Verifier/Optimizer整合
|
||||
5. VM補強(and/or, BoxRef演算, Array/Map fast-path確認)
|
||||
6. 軽量スナップショット + CLI分離テスト + ResultBox移行の仕上げ
|
||||
|
||||
## 🔗 依存/参照
|
||||
- 次フェーズ(P2P本体): [phase_9_79_p2pbox_rebuild.md](phase_9_79_p2pbox_rebuild.md)
|
||||
- CURRENT_TASKの「近々/中期」および「Phase 10 着手ゲート」
|
||||
- `docs/reference/execution-backend/p2p_spec.md`(P2Pは9.79で実装)
|
||||
|
||||
## 🚫 非スコープ
|
||||
- P2PBox/IntentBox/MessageBus実装(9.79で扱う)
|
||||
- Cranelift JIT/LLVM AOT(Phase 10以降)
|
||||
|
||||
---
|
||||
メモ: 9.78hは「MIRの足場を固める」段階。ここで26命令・SSA・検証・スナップショット・VM整合・ResultBox移行までを完了し、9.79(P2P)→Phase 10(Cranelift)へ安全に進む。
|
||||
@ -0,0 +1,44 @@
|
||||
# Phase 9.79: P2PBox再設計・実装(Cranelift前に完了)
|
||||
|
||||
Status: Planned (Pre-Cranelift priority)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
## 🎯 目的
|
||||
Cranelift導入前にP2P通信基盤(P2PBox/IntentBox/MessageBus/Transports)を再設計・実装し、VM/インタープリター双方で安定動作させる。
|
||||
|
||||
## 📦 スコープ
|
||||
1) モデル/API
|
||||
- IntentBox(TLV/serde互換)
|
||||
- MessageBus(単一共有・購読/発行・ログ)
|
||||
- P2PBox(new/on/send/pack、デリゲーション整合)
|
||||
|
||||
2) Transports(段階導入)
|
||||
- InProcess(同プロセスbus)
|
||||
- WebSocket(WSクライアント/サーバ連携)
|
||||
- WebRTC(将来、 signalingはOut of Scope)
|
||||
|
||||
3) 実行統合
|
||||
- VM/InterpreterのBoxCall経由で同一API
|
||||
- プラグイン/ExternCallと競合しない設計(BIDと将来統合)
|
||||
|
||||
## ✅ 受け入れ基準
|
||||
- `p2p_spec.md` の代表ケースがVM/Interpreterで成功
|
||||
- E2E: `node_a.send("bob", IntentBox(...))` が InProcess で往復確認
|
||||
- `NYASH_VM_DEBUG_BOXCALL=1` でも追跡容易(ログ整備)
|
||||
|
||||
## 🪜 実装ステップ
|
||||
前提(9.78h): [phase_9_78h_mir_pipeline_stabilization.md](phase_9_78h_mir_pipeline_stabilization.md) の受け入れ基準を満たすこと。
|
||||
|
||||
1. IntentBoxの最小実装(payload: MapBox/ArrayBox)
|
||||
2. MessageBus(購読/発行、ハンドラ登録)
|
||||
3. P2PBox(new/on/send、packはビルトインのみ)
|
||||
4. InProcessTransport(同プロセス配送)
|
||||
5. WebSocketTransport PoC(非同期I/OはInterpreter側、VMはフォールバック)
|
||||
6. E2E/スナップショット・ドキュメント整備
|
||||
|
||||
## 🔗 参考
|
||||
- docs/reference/execution-backend/p2p_spec.md
|
||||
- docs/guides/p2p-guide.md
|
||||
|
||||
---
|
||||
備考: 既存 `src/boxes/p2p_box.rs` は古い設計。完全新規で実装する。
|
||||
@ -1,5 +1,8 @@
|
||||
# Phase 9.8: BIDレジストリ + 自動コード生成ツール(WASM/VM/LLVM/言語)
|
||||
|
||||
Status: Planned(Phase 8.6完了後に着手)
|
||||
Last Updated: 2025-08-25
|
||||
|
||||
目的(What/Why)
|
||||
- 外部ライブラリをBox(BID)として配布・発見・利用するための基盤を用意する。
|
||||
- 当面は nyash.toml にBID情報を“埋め込む”方式で回し、将来は外部BID(manifest)参照+自動生成へ段階拡張する。
|
||||
|
||||
Reference in New Issue
Block a user