# 🚀 Nyash ネイティブビルド計画（Native Plan）

## 🎯 目的
開発者向けに「ビルド計画・段階的タスク・設計上の要点」を集約。  
利用者向けの具体的なビルド手順は guides/ 以下の各ガイドを参照。

## 📋 重要リンク
- **現在のタスク**: [../../../CURRENT_TASK.md](../../../CURRENT_TASK.md)
- **コア概念（速習）**: [reference/architecture/nyash_core_concepts.md](../../reference/architecture/nyash_core_concepts.md)
- **🤖 AI大会議記録**: [../ai_conference_native_compilation_20250814.md](../ai_conference_native_compilation_20250814.md)
- **🗺️ ネイティブコンパイル戦略**: [../native-compilation-roadmap.md](../native-compilation-roadmap.md)
- **フェーズ課題一覧**: [issues/](issues/)
- **🤖 Copilot協調**: [copilot_issues.txt](copilot_issues.txt)

## 🌟 **最新戦略 (2025-08-14 AI大会議策定)**

### ⚡ ネイティブコンパイル革命計画
**現状**: WASM 13.5倍実行高速化達成 → **目標**: 500-1000倍総合高速化

#### **Phase A: AOT WASM** (最優先 - 2-3週間)
```bash
nyash --compile-native program.hako -o program.exe
```
- **技術**: wasmtime compile でネイティブ化
- **効果**: 13.5倍 → 100倍 (7倍追加向上)

#### **Phase B: Cranelift Direct** (中期 - 2-3ヶ月)  
```
Pipeline: MIR → Cranelift IR → ネイティブバイナリ
```
- **技術**: エスケープ解析・ボックス化解除
- **効果**: 100倍 → 200倍

#### **Phase C: LLVM Ultimate** (長期 - 6ヶ月+)
```
Pipeline: MIR → LLVM IR → 最適化ネイティブ
```
- **技術**: LTO・PGO・高度最適化
- **効果**: 200倍 → 500-1000倍

### 🔑 成功の鍵 (3AI一致見解)
1. **MIR最適化**: ボックス化解除がバックエンド差より圧倒的効果
2. **エスケープ解析**: スタック割り当て・型特殊化
3. **段階的検証**: 各Phaseでベンチマーク駆動開発

要点サマリ（統合）
- ビルド方針
  - デフォルトは CLI 最小構成（`cargo build --bin nyash`）。GUI/Examples は feature で任意有効化。
  - Windows ネイティブ: MSVC または WSL + cargo-xwin によるクロスコンパイルを推奨。
- MIR/VM の段階的導入
  - Phase 5.2: `static box Main` → MIR への lowering 経路を実装済み。
 - Phase 6: 参照/弱参照の最小命令（RefNew/RefGet/RefSet, WeakNew/WeakLoad, BarrierRead/Write=no-op）。
  - 例外/Async は薄く導入、先に snapshot/verify の安定化を優先。
- 弱参照の意味論（実装で壊れにくく）
  - WeakLoad は Option<Ref> を返す（生存時 Some、消滅時 None）。PURE 扱い（必要に応じ READS_HEAP）。
  - `fini()` 後の使用禁止・weak 自動 null・cascading 順序（weak はスキップ）を不変として扱う。
- Safepoint と Barrier
  - 関数入口・ループ先頭・呼出直後に safepoint。Barrier は最初は no-op 命令として実装可。
- テスト戦略
  - 黄金テスト：ソース→MIR ダンプのスナップショットで後退検出。
  - VM/JIT 一致：同入力で VM と JIT の結果一致（将来の AOT でも同様）。
  - 弱参照の確率テスト：alloc→weak→drop→collect→weak_load の順序/タイミングを多様化。

進行フェーズ（抜粋）
- Phase 0: CLI 最小ビルド安定化（Linux/Windows）。
- Phase 5.2: static Main lowering（実装済み）。
- Phase 6: 参照/弱参照（Barrier は no-op で開始）。
- Phase 7: nowait/await（スレッドベース、FutureBox 連携）。

Phase 8: MIR→WASM（Rustランタイムに非依存のWASM生成）

目的
- MIR から素の WebAssembly を生成し、ブラウザ/wasmtime（WASI）でサンドボックス実行する。
- Rust は「コンパイラ本体」のみ。実行時は純WASM＋ホスト import（env.print など）。

範囲（最小）
- ABI/インポート・エクスポート:
  - exports: `main`, `memory`
  - imports: `env.print(i32)`（文字列は一旦 i32 値/デバッグ用途でOK。将来は文字列ABIを定義）
- メモリ/ヒープ:
  - 線形メモリに簡易ヒープ（bump/フリーリスト）。
  - Box は固定レイアウト（フィールド→オフセット表）。
- 命令カバレッジ（段階導入）:
  - 算術/比較/分岐/loop/return/print
  - RefNew/RefSet/RefGet（Phase 6 と整合）
  - Weak/Barrier は下地のみ（WeakLoad は当面 Some 相当でOK、Barrier は no-op）

段階的マイルストーン（PoC）
1) PoC1: 算術/分岐/return のみのWASM出力（wasmtime/ブラウザで実行）
2) PoC2: オブジェクト最小実装（RefNew/RefSet/RefGet）で `print(o.x)` が動作
3) PoC3: Weak/Barrier の下地（WeakLoad は常に有効、Barrier はダミー命令）
4) PoC4: CLI 統合（`--backend wasm` で wasm 生成・実行。ブラウザ用は別JSローダ）

受け入れ基準
- wasmtime 実行で戻り値/標準出力が期待通り（PoC1–2）。
- Ref 系がメモリ上で正しく動作（PoC2）。
- Weak/Barrier のダミー実装を含むWASMが生成され、実行に支障がない（PoC3）。
- CLI オプションで wasm バックエンドが選択でき、未実装部分は明瞭にエラーメッセージで誘導（PoC4）。

テスト方針
- 生成WASMを wasmtime で実行し、戻り値/print の内容を検証。
- ブラウザ用はヘッドレス環境（node + WebAssembly API）で同等の確認ができるスクリプトを用意。

対象外（Phase 8）
- 本格的GC/Weak無効化、fini/Pin/Unpin、JIT/AOT、複雑な文字列ABI。

アーカイブ（長文メモ・相談ログ）
- docs/予定/native-plan/archive/chatgptネイティブビルド大作戦.txt
- docs/予定/native-plan/archive/追記相談.txt
  - 上記2ファイルの要点は本 README に統合済み。詳細経緯はアーカイブを参照。

備考
- デバッグ補助: `--debug-fuel` でパーサーの燃料制御。`--dump-mir`/`--verify` で MIR の可視化・検証。
- 一部の開発用ログ出力（/mnt/c/...）は存在しない環境では黙って無視されます（問題なし）。
