docs: AOT/ネイティブコンパイル情報をexecution-backends.mdに追加

- 4つ目の実行方式としてAOT(Ahead-of-Time)コンパイルを文書化
- MIR→WASM→.cwasm のコンパイルパイプラインを説明
- wasm-backend featureでのビルド方法を明記
- 現在の実装状況(完全なスタンドアロン実行ファイルはTODO)を記載
- CLAUDE.mdのWASM説明も3種類(Rust→WASM、Nyash→WASM、Nyash→AOT)に更新
- CURRENT_TASK.mdにPhase 10.9/10.10の完了項目を追加

ChatGPT5さんのAOT試行に対応した適切なドキュメント配置を実施

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-29 02:05:39 +09:00
parent d67f27f4b8
commit 25fbebd650
34 changed files with 1631 additions and 353 deletions

View File

@ -1,6 +1,6 @@
# Nyash実行バックエンド完全ガイド
Nyashプログラミング言語は、**Everything is Box**哲学を維持しながら、3つの異なる実行方式をサポートしています。用途に応じて最適な実行方式を選択できます。
Nyashプログラミング言語は、**Everything is Box**哲学を維持しながら、4つの異なる実行方式をサポートしています。用途に応じて最適な実行方式を選択できます。
## 🚀 実行方式一覧
@ -9,6 +9,7 @@ Nyashプログラミング言語は、**Everything is Box**哲学を維持しな
| **インタープリター** | 開発・デバッグ | 直接AST実行、詳細ログ | 低速・高機能 |
| **VM** | 本番・高速実行 | MIR→VM実行 | 中速・最適化 |
| **WASM** | Web・サンドボックス | MIR→WASM変換 | 高速・移植性 |
| **AOT** (実験的) | 高速起動 | MIR→WASM→ネイティブ | 最高速・要wasmtime |
## 📋 CLIオプション
@ -54,6 +55,20 @@ nyash --compile-wasm program.nyash -o output.wat
nyash --compile-wasm program.nyash -o public/app.wat
```
### AOT/ネイティブコンパイル(実験的機能)
```bash
# ビルド時に wasm-backend feature が必要
cargo build --release --features wasm-backend
# AOTコンパイル.cwasm生成
nyash --compile-native program.nyash -o program
# または
nyash --aot program.nyash -o program
# 注意: 現在は完全なスタンドアロン実行ファイルではなく、
# wasmtime用のプリコンパイル済みWASM.cwasmが生成されます
```
### ⚡ ベンチマーク(パフォーマンス測定)
```bash
# 全バックエンド性能比較デフォルト5回実行
@ -186,6 +201,28 @@ NYASH_GC_COUNTING=1 NYASH_GC_TRACE=2 \
./target/release/nyash --backend vm examples/scheduler_demo.nyash
```
#### Boxからの切替GcConfigBox
環境変数ではなくNyashスクリプトから切り替える場合は `GcConfigBox` を使います。`apply()` で環境に反映され、その後の実行に適用されます。
```nyash
// 最小例: CountingGc + trace をオン
static box Main {
main() {
local G
G = new GcConfigBox()
G = G.setFlag("counting", true)
G = G.setFlag("trace", true) // 1/2/3 は環境。Box では on/off を切替
G.apply() // ← ここで反映
return "ok"
}
}
```
代表デモ(書き込みバリア/カウンタの可視化):
```bash
./target/release/nyash --backend vm examples/gc_counting_demo.nyash
```
## 🌐 WASM実行Web対応
### 特徴
@ -248,6 +285,58 @@ async function loadNyashWasm() {
</script>
```
## 🚀 AOT/ネイティブコンパイル(実験的)
### 特徴
- **用途**: 高速起動・配布用実行ファイル
- **実行**: AST→MIR→WASM→プリコンパイル済みネイティブ
- **速度**: 最高速JIT起動オーバーヘッドなし
- **制約**: wasmtimeランタイムが必要
### コンパイルパイプライン
```
Nyashソース → AST → MIR → WASM → .cwasmプリコンパイル済み
```
### ビルド方法
```bash
# 1. wasm-backend feature付きでNyashをビルド
cargo build --release --features wasm-backend
# 2. AOTコンパイル実行
./target/release/nyash --compile-native hello.nyash -o hello
# または短縮形
./target/release/nyash --aot hello.nyash -o hello
# 3. 生成されたファイル
# hello.cwasm が生成されるwasmtimeプリコンパイル形式
```
### 現在の実装状況
- ✅ MIR→WASM変換
- ✅ WASM→.cwasmwasmtimeプリコンパイル
- ❌ 完全なスタンドアロン実行ファイル生成TODO
- ❌ ランタイム埋め込み(将来実装予定)
### 使用例
```bash
# コンパイル
./target/release/nyash --aot examples/hello_world.nyash -o hello_aot
# 実行(将来的な目標)
# ./hello_aot # 現在は未実装
# 現在は wasmtime で実行
# wasmtime --precompiled hello_aot.cwasm
```
### 技術的詳細
AOTバックエンドは内部的に以下の処理を行います
1. **MirCompiler**: NyashコードをMIRに変換
2. **WasmBackend**: MIRをWASMバイトコードに変換
3. **wasmtime::Engine::precompile**: WASMをネイティブコードにプリコンパイル
4. **出力**: .cwasm形式で保存wasmtime独自形式
## 📊 パフォーマンス比較
### 🚀 実際のベンチマーク結果2025-08-14測定・修正