docs(native-plan): add Phase 8 MIR→WASM detailed issue; align copilot_issues index; expand README phase 8 section

This commit is contained in:
Moe Charm
2025-08-13 18:49:23 +09:00
parent 621bf7cc3d
commit fbc3cd9876
3 changed files with 114 additions and 8 deletions

View File

@ -15,7 +15,7 @@ Nyash ネイティブビルド計画Native Plan
- Windows ネイティブ: MSVC または WSL + cargo-xwin によるクロスコンパイルを推奨。 - Windows ネイティブ: MSVC または WSL + cargo-xwin によるクロスコンパイルを推奨。
- MIR/VM の段階的導入 - MIR/VM の段階的導入
- Phase 5.2: `static box Main` → MIR への lowering 経路を実装済み。 - Phase 5.2: `static box Main` → MIR への lowering 経路を実装済み。
- Phase 6: 参照/弱参照の最小命令RefNew/RefGet/RefSet, WeakNew/WeakLoad, BarrierRead/Write=no-op - Phase 6: 参照/弱参照の最小命令RefNew/RefGet/RefSet, WeakNew/WeakLoad, BarrierRead/Write=no-op
- 例外/Async は薄く導入、先に snapshot/verify の安定化を優先。 - 例外/Async は薄く導入、先に snapshot/verify の安定化を優先。
- 弱参照の意味論(実装で壊れにくく) - 弱参照の意味論(実装で壊れにくく)
- WeakLoad は Option<Ref> を返す(生存時 Some、消滅時 None。PURE 扱い(必要に応じ READS_HEAP - WeakLoad は Option<Ref> を返す(生存時 Some、消滅時 None。PURE 扱い(必要に応じ READS_HEAP
@ -33,6 +33,43 @@ Nyash ネイティブビルド計画Native Plan
- Phase 6: 参照/弱参照Barrier は no-op で開始)。 - Phase 6: 参照/弱参照Barrier は no-op で開始)。
- Phase 7: nowait/awaitスレッドベース、FutureBox 連携)。 - Phase 7: nowait/awaitスレッドベース、FutureBox 連携)。
Phase 8: MIR→WASMRustランタイムに非依存のWASM生成
目的
- MIR から素の WebAssembly を生成し、ブラウザ/wasmtimeWASIでサンドボックス実行する。
- Rust は「コンパイラ本体」のみ。実行時は純WASMホスト importenv.print など)。
範囲(最小)
- ABI/インポート・エクスポート:
- exports: `main`, `memory`
- imports: `env.print(i32)`(文字列は一旦 i32 値/デバッグ用途でOK。将来は文字列ABIを定義
- メモリ/ヒープ:
- 線形メモリに簡易ヒープbump/フリーリスト)。
- Box は固定レイアウト(フィールド→オフセット表)。
- 命令カバレッジ(段階導入):
- 算術/比較/分岐/loop/return/print
- RefNew/RefSet/RefGetPhase 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 実行で戻り値/標準出力が期待通りPoC12
- 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/chatgptネイティブビルド大作戦.txt
- docs/予定/native-plan/archive/追記相談.txt - docs/予定/native-plan/archive/追記相談.txt

View File

@ -194,7 +194,30 @@ References:
------------------------------------------------------------ ------------------------------------------------------------
11. Phase 8: JIT (baseline) planning 11. Phase 8: MIR→WASM codegen (browser/wasmtime; sandboxed; Rust runtime free)
Summary:
- MIR から素の WebAssembly を生成し、ブラウザ/wasmtimeWASIでサンドボックス実行する。
- Rust はコンパイラ本体のみ。実行は純WASMホストimportenv.print など)。
Scope/Tasks:
- ABI/Imports/Exports 定義exports: main/memory、imports: env.print(i32) 等の最小)
- 線形メモリと簡易ヒープbump/自由リスト)
- 命令カバレッジ(段階導入): 算術/比較/分岐/loop/return/print、RefNew/RefSet/RefGetPhase 6 整合、Weak/Barrier はダミー
Acceptance Criteria:
- wasmtime 実行で戻り値/print が期待通りPoC12
- Ref 系がメモリ上で正しく動作PoC2
- Weak/Barrier のダミー実装を含むWASMが生成・実行PoC3
- CLI `--backend wasm` は未実装でもよいが、実装する場合は明瞭にエラーメッセージ/誘導
References:
- docs/予定/native-plan/README.mdPhase 8 節)
- docs/説明書/wasm/*(ユーザー向けメモ)
------------------------------------------------------------
12. Phase 9: JIT (baseline) planning
Summary: Summary:
- baseline JIT の設計と MIR→JIT の変換方針固め。 - baseline JIT の設計と MIR→JIT の変換方針固め。
@ -208,20 +231,20 @@ Acceptance Criteria:
------------------------------------------------------------ ------------------------------------------------------------
12. Phase 9: AOT/WASM exploration (scaffolding only) 13. Phase 10: AOT exploration (scaffolding only)
Summary: Summary:
- AOT/WASM の下ごしらえ(ビルド配線と最小 PoC - AOT の下ごしらえ(ビルド配線と最小 PoC
Scope/Tasks: Scope/Tasks:
- Cargo features/targets 整備、最小 wasm-bindgen 配線 - Cargo features/targets 整備将来のAOT配線
Acceptance Criteria: Acceptance Criteria:
- `wasm` ターゲットでのビルド雛形が通る - AOT 雛形/設計が通る(ビルド/テスト スケルトン)
------------------------------------------------------------ ------------------------------------------------------------
13. Phase 10: Packaging/CI polish 14. Packaging/CI polish
Summary: Summary:
- Windows/Linux の配布パッケージ化と CI 整備。 - Windows/Linux の配布パッケージ化と CI 整備。
@ -232,4 +255,3 @@ Scope/Tasks:
Acceptance Criteria: Acceptance Criteria:
- リリースアーティファクトが自動生成される - リリースアーティファクトが自動生成される

View File

@ -0,0 +1,47 @@
# Phase 8: MIR→WASM codegen (browser/wasmtime; sandboxed; Rust runtime free)
## Summary
- MIR から素の WebAssembly を生成し、ブラウザ/wasmtimeWASIでサンドボックス実行する。
- Rust は「コンパイラ本体」のみ。実行は純WASMホストimportenv.print 等)。
## Scope
- ABI/Imports/Exports最小
- exports: `main`, `memory`
- imports: `env.print(i32)`デバッグ用に整数のみ。将来文字列ABIを定義
- メモリ/ヒープ
- 線形メモリに簡易ヒープbump or フリーリスト)
- Box の固定レイアウト(フィールド→オフセット表; 型名→レイアウトは暫定固定)
- 命令カバレッジ(段階導入)
- PoC1: 算術/比較/分岐/loop/return/print
- PoC2: RefNew/RefSet/RefGetPhase 6 と整合)で `print(o.x)`
- PoC3: Weak/Barrier の下地WeakLoad は当面 Some 相当、Barrier は no-op
- CLI 統合(任意)
- `--backend wasm` で生成・実行wasmtime 呼び出し)。未実装の場合は分かりやすいエラーで誘導。
## Tasks
- [ ] WASMバックエンド新規モジュールの足場作成`src/backend/wasm/`
- [ ] PoC1: MIR → WAT/WASM 変換(算術/比較/分岐/loop/return/print
- [ ] PoC2: RefNew/RefSet/RefGet の線形メモリ上実装(簡易ヒープ + 固定レイアウト)
- [ ] PoC3: WeakLoad/Barrier のダミー実装将来GC対応のためのフック
- [ ] 実行ラッパwasmtime CLIとブラウザローダJS importObjectのサンプル
- [ ] (任意)`--backend wasm` CLI のプレースホルダ/実装
## Acceptance Criteria
- PoC1: 生成WASMを wasmtime で実行し、戻り値・print 出力が期待通り
- PoC2: `o = new Obj(); o.x = 1; print(o.x)` 相当が Ref 系命令で動作
- PoC3: Weak/Barrier のダミー命令を含むWASMが生成・実行実質 no-op で可)
- CLI 連携を行う場合、未対応箇所は明瞭なエラー/誘導メッセージ
## Tests
- tests/wasm_poc1_basic.shまたは Rust integration
- MIR → WASM の出力を wasmtime で実行し、終了コード/標準出力を検証
- tests/wasm_poc2_ref_ops.sh
- RefNew/RefSet/RefGet 経由の `print(o.x)` を確認
- Node/ブラウザ用:ヘッドレス実行で `env.print` の呼び出しを検証する最小スクリプト
## Out of Scope
- 本格GC/Weak無効化、fini/Pin/Unpin、JIT/AOT の高度最適化、複雑な文字列ABI
## References
- docs/予定/native-plan/README.mdPhase 8
- docs/説明書/wasm/*