# 🚀 Phase 9: AOT WASM実装（最優先）

## 📋 Summary
wasmtime compileによるAOT実行ファイル生成で確実なユーザー価値提供。既存WASM基盤を活用し、配布可能なネイティブ実行ファイルを短期間で実現する。

## 🎯 実装目標
```bash
# 目標実装
nyash --compile-native app.hako -o app.exe    # AOT実行ファイル生成
nyash --aot app.hako                          # 短縮形
./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

### 機能要件
- [ ] `nyash --compile-native app.hako -o app.exe` 動作
- [ ] 生成実行ファイルが単独で動作（依存関係なし）
- [ ] 既存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大会議決定）
- docs/reference/architecture/execution-backends.md（WASM基盤情報）
- [wasmtime compile documentation](https://docs.wasmtime.dev/cli-cache.html)

---

**💡 Tip**: 短期間で確実な成果を目指し、複雑な最適化より実用価値を最優先にする戦略です。

最終更新: 2025-08-14
作成者: Claude（実用優先戦略）