feat(plugin): Fix plugin BoxRef return and Box argument support
- Fixed deadlock in FileBox plugin copyFrom implementation (single lock) - Added TLV Handle (tag=8) parsing in calls.rs for returned BoxRefs - Improved plugin loader with config path consistency and detailed logging - Fixed loader routing for proper Handle type_id/fini_method_id resolution - Added detailed logging for TLV encoding/decoding in plugin_loader_v2 Test docs/examples/plugin_boxref_return.nyash now works correctly: - cloneSelf() returns FileBox Handle properly - copyFrom(Box) accepts plugin Box arguments - Both FileBox instances close and fini correctly 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -0,0 +1,184 @@
|
||||
# 🏆 Phase 10: LLVM Direct AOT(最高性能実現)
|
||||
|
||||
## 📋 Summary
|
||||
MIR→LLVM IR直接変換による最高性能AOT実現。Cranelift JITをスキップし、実用優先戦略でLLVMの強力な最適化を直接活用する。
|
||||
|
||||
## 🎯 実装目標
|
||||
```bash
|
||||
# Phase 9基盤の拡張
|
||||
nyash --compile-llvm app.nyash -o app # LLVM AOT実行ファイル生成
|
||||
nyash --optimize app.nyash -o app # 最適化AOT(LTO・PGO)
|
||||
./app # 最高性能実行
|
||||
|
||||
# 内部実装パイプライン
|
||||
Nyash → AST → MIR → LLVM IR → 最適化 → ネイティブ実行ファイル
|
||||
```
|
||||
|
||||
## 🔧 技術アプローチ
|
||||
|
||||
### 1. MIR→LLVM IR変換基盤
|
||||
```rust
|
||||
// 追加予定: src/backend/llvm/mod.rs
|
||||
use llvm_sys::*;
|
||||
|
||||
pub struct LLVMBackend {
|
||||
context: LLVMContextRef,
|
||||
module: LLVMModuleRef,
|
||||
builder: LLVMBuilderRef,
|
||||
}
|
||||
|
||||
impl LLVMBackend {
|
||||
pub fn compile_mir(&mut self, mir: &MirModule) -> Result<Vec<u8>, String> {
|
||||
// MIR→LLVM IR変換
|
||||
self.lower_mir_to_llvm(mir)?;
|
||||
|
||||
// 最適化パス適用
|
||||
self.apply_optimization_passes()?;
|
||||
|
||||
// ネイティブコード生成
|
||||
self.generate_object_code()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. エスケープ解析・ボックス化解除
|
||||
```rust
|
||||
// Everything is Box最適化の核心
|
||||
pub struct EscapeAnalysis {
|
||||
// Box→スタック値最適化判定
|
||||
pub fn analyze_box_usage(&self, mir: &MirModule) -> BoxOptimizationMap,
|
||||
|
||||
// 型特殊化機会検出
|
||||
pub fn detect_specialization(&self, mir: &MirModule) -> SpecializationMap,
|
||||
}
|
||||
|
||||
// 最適化例:
|
||||
// Before: %0 = NewBox(StringType, "hello") // ヒープ割り当て
|
||||
// After: %0 = "hello" // スタック配置
|
||||
```
|
||||
|
||||
### 3. LTO・PGO統合
|
||||
```rust
|
||||
// Link-time optimization
|
||||
pub fn apply_lto(&self, modules: &[LLVMModuleRef]) -> Result<LLVMModuleRef, String> {
|
||||
// 関数間インライン・デッドコード除去
|
||||
}
|
||||
|
||||
// Profile-guided optimization
|
||||
pub fn apply_pgo(&self, profile_data: &[u8]) -> Result<(), String> {
|
||||
// プロファイル情報による最適化
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 パフォーマンス目標
|
||||
|
||||
| 指標 | Phase 9 AOT WASM | Phase 10 LLVM AOT | 改善率 |
|
||||
|------|-------------------|-------------------|--------|
|
||||
| **実行性能** | ~1.6ms | **<0.1ms** | **16倍向上** |
|
||||
| **メモリ効率** | WASM制約あり | **Box割当80%削減** | **5倍効率** |
|
||||
| **起動時間** | ~10ms | **<1ms** | **10倍高速** |
|
||||
| **総合性能** | 500倍(対Interpreter) | **13500倍目標** | **27倍向上** |
|
||||
|
||||
## 🛠️ 実装ステップ(4-6ヶ月)
|
||||
|
||||
### Month 1-2: LLVM統合基盤
|
||||
- [ ] LLVM-sys統合・ビルド環境整備
|
||||
- [ ] MIR→LLVM IR基本変換
|
||||
- [ ] 基本型・演算のLLVM表現
|
||||
- [ ] 最小実行可能バイナリ生成
|
||||
|
||||
### Month 3-4: Everything is Box最適化
|
||||
- [ ] エスケープ解析実装
|
||||
- [ ] Box→スタック値最適化
|
||||
- [ ] 型特殊化・インライン展開
|
||||
- [ ] メモリレイアウト最適化
|
||||
|
||||
### Month 5-6: 高度最適化・プロダクション対応
|
||||
- [ ] LTO・PGO統合
|
||||
- [ ] プロファイル駆動最適化
|
||||
- [ ] 他言語との性能比較
|
||||
- [ ] プロダクションレベル品質確保
|
||||
|
||||
## 🔍 Everything is Box最適化戦略
|
||||
|
||||
### Box回避最適化
|
||||
```nyash
|
||||
// 元コード
|
||||
local str = new StringBox("hello")
|
||||
local len = str.length()
|
||||
|
||||
// LLVM最適化後(概念)
|
||||
local str = "hello" // スタック配置
|
||||
local len = 5 // コンパイル時計算
|
||||
```
|
||||
|
||||
### NaN Boxing活用
|
||||
```rust
|
||||
// 効率的な値表現
|
||||
union NyashValue {
|
||||
ptr: *mut Box<dyn NyashBox>, // ポインタ
|
||||
int: i64, // 整数直接格納
|
||||
float: f64, // 浮動小数点
|
||||
// NaN空間でタグ判別
|
||||
}
|
||||
```
|
||||
|
||||
### 型推論・特殊化
|
||||
```rust
|
||||
// 汎用版
|
||||
fn generic_add(a: NyashValue, b: NyashValue) -> NyashValue
|
||||
|
||||
// 特殊化版(LLVM生成)
|
||||
fn specialized_int_add(a: i64, b: i64) -> i64 // 直接レジスタ操作
|
||||
```
|
||||
|
||||
## ✅ Acceptance Criteria
|
||||
|
||||
### 性能要件
|
||||
- [ ] **1000倍高速化達成**(現在13.5倍 → 目標13500倍)
|
||||
- [ ] **Box割当数80%削減**
|
||||
- [ ] **起動時間ネイティブレベル**(<1ms)
|
||||
- [ ] **メモリ使用量50%削減**
|
||||
|
||||
### 品質要件
|
||||
- [ ] **既存プログラム100%互換**
|
||||
- [ ] **全テストスイートPASS**
|
||||
- [ ] **他言語との競争力**(C/C++/Rust並み性能)
|
||||
- [ ] **プロダクション安定性**
|
||||
|
||||
### 技術要件
|
||||
- [ ] **LLVM統合完全実装**
|
||||
- [ ] **エスケープ解析実用レベル**
|
||||
- [ ] **LTO・PGO動作確認**
|
||||
- [ ] **CI自動化対応**
|
||||
|
||||
## 🚀 期待される効果
|
||||
|
||||
### 最高性能実現
|
||||
- **ネイティブレベル性能**: C/C++/Rust並みの実行速度
|
||||
- **メモリ効率**: Box操作の根本的最適化
|
||||
- **起動高速**: 瞬時起動(<1ms)
|
||||
|
||||
### 競合優位確立
|
||||
- **Everything is Box**: 史上初のBox哲学ネイティブ最適化
|
||||
- **技術的差別化**: 独自最適化技術による優位性
|
||||
- **プロダクション対応**: 実用レベルの高性能実現
|
||||
|
||||
### 言語完成
|
||||
- **現代的言語**: 開発効率と実行性能の完全両立
|
||||
- **エコシステム**: 高性能基盤による周辺ツール発展
|
||||
- **採用促進**: 性能面での採用障壁完全除去
|
||||
|
||||
## 📖 References
|
||||
- docs/予定/native-plan/copilot_issues.txt(Phase 10詳細)
|
||||
- docs/予定/ai_conference_native_compilation_20250814.md(AI大会議結果)
|
||||
- docs/予定/native-plan/issues/phase9_aot_wasm_implementation.md(Phase 9基盤)
|
||||
- [LLVM Language Reference](https://llvm.org/docs/LangRef.html)
|
||||
- [LLVM Optimization Guide](https://llvm.org/docs/Passes.html)
|
||||
|
||||
---
|
||||
|
||||
**💡 Tip**: Phase 9のAOT基盤を活用し、段階的にLLVM最適化を導入する戦略で確実な成果を目指します。
|
||||
|
||||
最終更新: 2025-08-14
|
||||
作成者: Claude(実用優先戦略)
|
||||
Reference in New Issue
Block a user