2025-09-17 22:32:38 +09:00
|
|
|
|
# 🚀 Phase 9: AOT WASM実装(最優先)
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 Summary
|
|
|
|
|
|
wasmtime compileによるAOT実行ファイル生成で確実なユーザー価値提供。既存WASM基盤を活用し、配布可能なネイティブ実行ファイルを短期間で実現する。
|
|
|
|
|
|
|
|
|
|
|
|
## 🎯 実装目標
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 目標実装
|
2025-11-06 15:41:52 +09:00
|
|
|
|
nyash --compile-native app.hako -o app.exe # AOT実行ファイル生成
|
|
|
|
|
|
nyash --aot app.hako # 短縮形
|
2025-09-17 22:32:38 +09:00
|
|
|
|
./app.exe # 起動高速化(JIT起動コスト除去)
|
|
|
|
|
|
|
|
|
|
|
|
# 内部実装
|
|
|
|
|
|
wasmtime compile app.wasm -o app.cwasm # 事前コンパイル
|
|
|
|
|
|
Module::deserialize_file("app.cwasm") # ランタイム読み込み
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 技術的実装詳細
|
|
|
|
|
|
|
|
|
|
|
|
### 1. wasmtime::Config統一実装
|
|
|
|
|
|
```rust
|
|
|
|
|
|
// 追加予定: src/backend/aot/mod.rs
|
|
|
|
|
|
pub struct AOTBackend {
|
|
|
|
|
|
config: wasmtime::Config,
|
|
|
|
|
|
engine: wasmtime::Engine,
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl AOTBackend {
|
|
|
|
|
|
pub fn compile_module(&self, wasm_bytes: &[u8]) -> Result<Vec<u8>, String> {
|
|
|
|
|
|
let module = wasmtime::Module::new(&self.engine, wasm_bytes)?;
|
|
|
|
|
|
module.serialize()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub fn load_precompiled(&self, cwasm_bytes: &[u8]) -> Result<wasmtime::Module, String> {
|
|
|
|
|
|
unsafe { wasmtime::Module::deserialize(&self.engine, cwasm_bytes) }
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. CLI統合実装
|
|
|
|
|
|
```rust
|
|
|
|
|
|
// 追加予定: src/main.rs
|
|
|
|
|
|
#[derive(Parser)]
|
|
|
|
|
|
struct Args {
|
|
|
|
|
|
// 既存オプション...
|
|
|
|
|
|
|
|
|
|
|
|
/// Compile to native executable (AOT)
|
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
|
compile_native: bool,
|
|
|
|
|
|
|
|
|
|
|
|
/// AOT compilation (short form)
|
|
|
|
|
|
#[arg(long)]
|
|
|
|
|
|
aot: bool,
|
|
|
|
|
|
|
|
|
|
|
|
/// Output file for AOT compilation
|
|
|
|
|
|
#[arg(short, long)]
|
|
|
|
|
|
output: Option<String>,
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 単一バイナリ梱包
|
|
|
|
|
|
```rust
|
|
|
|
|
|
// 生成例: target/release/nyash_app.exe
|
|
|
|
|
|
// 内部構造:
|
|
|
|
|
|
// [nyash_runtime] + [app.cwasm (embedded)] + [metadata]
|
|
|
|
|
|
|
|
|
|
|
|
const EMBEDDED_CWASM: &[u8] = include_bytes!("app.cwasm");
|
|
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
|
let engine = wasmtime::Engine::default();
|
|
|
|
|
|
let module = unsafe { wasmtime::Module::deserialize(&engine, EMBEDDED_CWASM) }?;
|
|
|
|
|
|
// ... 実行
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📊 パフォーマンス目標
|
|
|
|
|
|
|
|
|
|
|
|
| 指標 | 現在 | 目標 | 改善率 |
|
|
|
|
|
|
|------|------|------|--------|
|
|
|
|
|
|
| **実行性能** | WASM JIT: 8.12ms | AOT: <1.6ms | **5倍高速化** |
|
|
|
|
|
|
| **起動時間** | JIT起動: ~50ms | AOT起動: <10ms | **5倍高速化** |
|
|
|
|
|
|
| **配布サイズ** | Runtime必要 | 単一実行ファイル | **依存関係解消** |
|
|
|
|
|
|
| **総合改善** | 13.5倍(対Interpreter) | **500倍目標** | **37倍追加向上** |
|
|
|
|
|
|
|
|
|
|
|
|
## 🛠️ 実装ステップ(2-3週間)
|
|
|
|
|
|
|
|
|
|
|
|
### Week 1: AOT基盤実装
|
|
|
|
|
|
- [ ] `src/backend/aot/mod.rs` 基本構造
|
|
|
|
|
|
- [ ] wasmtime::Config最適化設定
|
|
|
|
|
|
- [ ] .cwasm生成・ロードパイプライン
|
|
|
|
|
|
- [ ] `--compile-native` CLI基本実装
|
|
|
|
|
|
|
|
|
|
|
|
### Week 2: パッケージング・最適化
|
|
|
|
|
|
- [ ] 単一バイナリ梱包(`include_bytes!`)
|
|
|
|
|
|
- [ ] 互換性キー管理(CPU機能・wasmtimeバージョン)
|
|
|
|
|
|
- [ ] 起動時間最適化
|
|
|
|
|
|
- [ ] エラーハンドリング・デバッグ情報
|
|
|
|
|
|
|
|
|
|
|
|
### Week 3: 統合・検証
|
|
|
|
|
|
- [ ] 既存テストスイートでの動作確認
|
|
|
|
|
|
- [ ] ベンチマーク拡張(AOT性能測定)
|
|
|
|
|
|
- [ ] ドキュメント更新
|
|
|
|
|
|
- [ ] CI統合(自動AOTビルド)
|
|
|
|
|
|
|
|
|
|
|
|
## 🔍 技術的課題と対策
|
|
|
|
|
|
|
|
|
|
|
|
### 互換性管理
|
|
|
|
|
|
**課題**: wasmtimeバージョンアップで.cwasm互換性切れ
|
|
|
|
|
|
**対策**:
|
|
|
|
|
|
- 互換性キー埋め込み(wasmtimeバージョン・CPUフラグ)
|
|
|
|
|
|
- graceful degradation(互換切れ時はJITフォールバック)
|
|
|
|
|
|
|
|
|
|
|
|
### CPU機能検出
|
|
|
|
|
|
**課題**: SIMD/CPU拡張でベンチマーク結果変動
|
|
|
|
|
|
**対策**:
|
|
|
|
|
|
- baseline/v3二段ビルド
|
|
|
|
|
|
- 実行時CPU検出で最適.cwasm選択
|
|
|
|
|
|
|
|
|
|
|
|
### デバッグ情報
|
|
|
|
|
|
**課題**: AOTで元コード位置特定困難
|
|
|
|
|
|
**対策**:
|
|
|
|
|
|
- `Config::debug_info(true)`設定
|
|
|
|
|
|
- ソースマップ埋め込み
|
|
|
|
|
|
|
|
|
|
|
|
## ✅ Acceptance Criteria
|
|
|
|
|
|
|
|
|
|
|
|
### 機能要件
|
2025-11-06 15:41:52 +09:00
|
|
|
|
- [ ] `nyash --compile-native app.hako -o app.exe` 動作
|
2025-09-17 22:32:38 +09:00
|
|
|
|
- [ ] 生成実行ファイルが単独で動作(依存関係なし)
|
|
|
|
|
|
- [ ] 既存Nyashプログラムが100%互換で高速実行
|
|
|
|
|
|
|
|
|
|
|
|
### 性能要件
|
|
|
|
|
|
- [ ] 起動時間 < 100ms
|
|
|
|
|
|
- [ ] 実行性能 > 現在WASM JIT(8.12ms)
|
|
|
|
|
|
- [ ] 配布ファイルサイズ < 10MB
|
|
|
|
|
|
|
|
|
|
|
|
### 品質要件
|
|
|
|
|
|
- [ ] 全テストケースPASS
|
|
|
|
|
|
- [ ] エラーハンドリング適切
|
|
|
|
|
|
- [ ] CI自動テスト通過
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 期待される効果
|
|
|
|
|
|
|
|
|
|
|
|
### 即座実用価値
|
|
|
|
|
|
- **配布可能実行ファイル**: `app.exe`単体で動作
|
|
|
|
|
|
- **起動高速化**: JIT起動コスト除去
|
|
|
|
|
|
- **依存関係解消**: wasmtimeランタイム不要
|
|
|
|
|
|
|
|
|
|
|
|
### 差別化優位
|
|
|
|
|
|
- **Everything is Box**: ネイティブAOT実現
|
|
|
|
|
|
- **Web互換性**: WASM基盤活用
|
|
|
|
|
|
- **段階最適化**: JIT→AOTの技術蓄積
|
|
|
|
|
|
|
|
|
|
|
|
### LLVM準備
|
|
|
|
|
|
- **AOT基盤確立**: Phase 10での技術転用
|
|
|
|
|
|
- **最適化知見**: エスケープ解析・ボックス化解除準備
|
|
|
|
|
|
- **ベンチマーク基準**: 真の性能比較基盤
|
|
|
|
|
|
|
|
|
|
|
|
## 📖 References
|
|
|
|
|
|
- docs/予定/native-plan/copilot_issues.txt(Phase 9詳細)
|
|
|
|
|
|
- docs/予定/ai_conference_native_compilation_20250814.md(AI大会議決定)
|
2025-11-04 16:33:04 +09:00
|
|
|
|
- docs/reference/architecture/execution-backends.md(WASM基盤情報)
|
2025-09-17 22:32:38 +09:00
|
|
|
|
- [wasmtime compile documentation](https://docs.wasmtime.dev/cli-cache.html)
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**💡 Tip**: 短期間で確実な成果を目指し、複雑な最適化より実用価値を最優先にする戦略です。
|
|
|
|
|
|
|
|
|
|
|
|
最終更新: 2025-08-14
|
|
|
|
|
|
作成者: Claude(実用優先戦略)
|