169 lines
4.4 KiB
Markdown
169 lines
4.4 KiB
Markdown
|
|
# Phase 11.5: JIT完全統合 - sync/GC/非同期の最終実装
|
|||
|
|
|
|||
|
|
## 🎯 概要
|
|||
|
|
Phase 11.5は、Nyashの全実行レイヤー(インタープリター/MIR/VM/JIT)でsync処理、GC処理、非同期処理を完全に統合する最終フェーズです。
|
|||
|
|
|
|||
|
|
## 📊 現状分析(2025-08-30)
|
|||
|
|
|
|||
|
|
### ✅ 完了済み
|
|||
|
|
1. **基本アーキテクチャ**
|
|||
|
|
- Everything is Box哲学の完全実装
|
|||
|
|
- インタープリター → MIR → VM → JIT パイプライン
|
|||
|
|
- プラグインシステム(C ABI/TLVハンドル)
|
|||
|
|
|
|||
|
|
2. **sync処理**
|
|||
|
|
- Arc<Mutex>/Arc<RwLock>による完全スレッドセーフ設計
|
|||
|
|
- 全レイヤーでの一貫した同期化
|
|||
|
|
|
|||
|
|
3. **GC基礎**
|
|||
|
|
- カウンティングGC実装(NYASH_GC_COUNTING=1)
|
|||
|
|
- Read/Writeバリア実装
|
|||
|
|
- VMセーフポイント
|
|||
|
|
|
|||
|
|
4. **非同期基礎**
|
|||
|
|
- FutureBox/TimerBox実装
|
|||
|
|
- SingleThreadScheduler
|
|||
|
|
- nowait/wait文
|
|||
|
|
|
|||
|
|
## 🚀 Phase 11.5 タスク一覧
|
|||
|
|
|
|||
|
|
### 1. JIT sync処理統合
|
|||
|
|
- [ ] **1.1 Atomic操作の最適化**
|
|||
|
|
- Arc<Mutex>アクセスのJIT最適化
|
|||
|
|
- Lock elision(不要なロック除去)
|
|||
|
|
- Read-only pathでのロック回避
|
|||
|
|
|
|||
|
|
- [ ] **1.2 Memory ordering最適化**
|
|||
|
|
- Relaxed/Acquire/Release semanticsの活用
|
|||
|
|
- プラットフォーム別最適化(x86/ARM)
|
|||
|
|
|
|||
|
|
### 2. JIT GC統合
|
|||
|
|
- [ ] **2.1 Write barrier除去**
|
|||
|
|
- Escape analysisによる不要バリア検出
|
|||
|
|
- Stack allocation最適化
|
|||
|
|
- Generational hypothesis活用
|
|||
|
|
|
|||
|
|
- [ ] **2.2 Safepoint最適化**
|
|||
|
|
- Loop safepoint挿入
|
|||
|
|
- Call site safepoint
|
|||
|
|
- Polling overhead削減
|
|||
|
|
|
|||
|
|
- [ ] **2.3 GC情報の伝播**
|
|||
|
|
- Stack map生成
|
|||
|
|
- Root set tracking
|
|||
|
|
- Precise GC対応
|
|||
|
|
|
|||
|
|
### 3. JIT 非同期処理統合
|
|||
|
|
- [ ] **3.1 Coroutine変換**
|
|||
|
|
- async/await → state machine変換
|
|||
|
|
- Stack switching最適化
|
|||
|
|
- Continuation passing
|
|||
|
|
|
|||
|
|
- [ ] **3.2 スケジューラー統合**
|
|||
|
|
- Work stealing queue
|
|||
|
|
- CPU affinity最適化
|
|||
|
|
- Yield point最適化
|
|||
|
|
|
|||
|
|
### 4. 統合テスト・ベンチマーク
|
|||
|
|
- [ ] **4.1 性能測定**
|
|||
|
|
- sync処理のオーバーヘッド測定
|
|||
|
|
- GC pause time測定
|
|||
|
|
- 非同期処理のレイテンシ測定
|
|||
|
|
|
|||
|
|
- [ ] **4.2 正確性検証**
|
|||
|
|
- Race condition検出
|
|||
|
|
- Memory leak検出
|
|||
|
|
- Deadlock検出
|
|||
|
|
|
|||
|
|
## 📋 実装優先順位
|
|||
|
|
|
|||
|
|
### Phase 11.5a: Write barrier除去(最重要)
|
|||
|
|
```rust
|
|||
|
|
// 現在: すべてのBox操作でbarrier
|
|||
|
|
vm.execute_ref_set() -> gc.barrier(Write)
|
|||
|
|
|
|||
|
|
// 目標: JITでescape analysisして除去
|
|||
|
|
if !escapes_to_heap(value) {
|
|||
|
|
// barrierスキップ
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Phase 11.5b: Atomic最適化
|
|||
|
|
```rust
|
|||
|
|
// 現在: Arc<Mutex>の重いロック
|
|||
|
|
let value = box.lock().unwrap().clone();
|
|||
|
|
|
|||
|
|
// 目標: Read-onlyならatomic load
|
|||
|
|
if is_read_only(box) {
|
|||
|
|
atomic_load_relaxed(box)
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Phase 11.5c: Coroutine実装
|
|||
|
|
```nyash
|
|||
|
|
// 将来構文
|
|||
|
|
async function fetchData() {
|
|||
|
|
local result = await httpGet("...")
|
|||
|
|
return result
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 成功基準
|
|||
|
|
|
|||
|
|
1. **性能向上**
|
|||
|
|
- sync処理: 50%以上のロックオーバーヘッド削減
|
|||
|
|
- GC: 90%以上のwrite barrier除去
|
|||
|
|
- 非同期: ネイティブthread並みの性能
|
|||
|
|
|
|||
|
|
2. **互換性維持**
|
|||
|
|
- 既存のNyashコードがそのまま動作
|
|||
|
|
- プラグインシステムとの完全互換
|
|||
|
|
|
|||
|
|
3. **デバッグ性**
|
|||
|
|
- JIT最適化の可視化(NYASH_JIT_OPT_TRACE)
|
|||
|
|
- GC統計の詳細化
|
|||
|
|
- 非同期処理のトレース
|
|||
|
|
|
|||
|
|
## 📅 実装スケジュール(推定)
|
|||
|
|
|
|||
|
|
- **Week 1-2**: Write barrier除去とescape analysis
|
|||
|
|
- **Week 3**: Atomic操作最適化
|
|||
|
|
- **Week 4**: Coroutine基礎実装
|
|||
|
|
- **Week 5**: 統合テストとベンチマーク
|
|||
|
|
- **Week 6**: ドキュメント化と最適化
|
|||
|
|
|
|||
|
|
## 🔧 技術的詳細
|
|||
|
|
|
|||
|
|
### Escape Analysis実装案
|
|||
|
|
```rust
|
|||
|
|
// MIR解析でallocサイトを特定
|
|||
|
|
struct EscapeAnalysis {
|
|||
|
|
allocations: HashMap<ValueId, AllocSite>,
|
|||
|
|
escapes: HashSet<ValueId>,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
impl EscapeAnalysis {
|
|||
|
|
fn analyze(&mut self, func: &MirFunction) {
|
|||
|
|
// 1. allocation site収集
|
|||
|
|
// 2. data flow解析
|
|||
|
|
// 3. escape判定
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### JIT統合ポイント
|
|||
|
|
```rust
|
|||
|
|
// cranelift-jitでのbarrier除去
|
|||
|
|
if !self.escape_info.escapes(value) {
|
|||
|
|
// emit_call(gc_write_barrier) をスキップ
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎉 期待される成果
|
|||
|
|
|
|||
|
|
Phase 11.5完了により、Nyashは:
|
|||
|
|
- **産業レベルの性能**: GC pauseがマイクロ秒単位
|
|||
|
|
- **真の並行性**: lock-free data structures対応
|
|||
|
|
- **モダンな非同期**: async/await完全サポート
|
|||
|
|
|
|||
|
|
これにより、**30日で作られたとは思えない**世界クラスの言語が完成します!
|