docs(native-plan): add Phase 8 MIR→WASM detailed issue; align copilot_issues index; expand README phase 8 section
This commit is contained in:
@ -33,6 +33,43 @@ Nyash ネイティブビルド計画(Native Plan)
|
||||
- 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
|
||||
|
||||
@ -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 を生成し、ブラウザ/wasmtime(WASI)でサンドボックス実行する。
|
||||
- Rust はコンパイラ本体のみ。実行は純WASM+ホストimport(env.print など)。
|
||||
|
||||
Scope/Tasks:
|
||||
- ABI/Imports/Exports 定義(exports: main/memory、imports: env.print(i32) 等の最小)
|
||||
- 線形メモリと簡易ヒープ(bump/自由リスト)
|
||||
- 命令カバレッジ(段階導入): 算術/比較/分岐/loop/return/print、RefNew/RefSet/RefGet(Phase 6 整合)、Weak/Barrier はダミー
|
||||
|
||||
Acceptance Criteria:
|
||||
- wasmtime 実行で戻り値/print が期待通り(PoC1–2)
|
||||
- Ref 系がメモリ上で正しく動作(PoC2)
|
||||
- Weak/Barrier のダミー実装を含むWASMが生成・実行(PoC3)
|
||||
- CLI `--backend wasm` は未実装でもよいが、実装する場合は明瞭にエラーメッセージ/誘導
|
||||
|
||||
References:
|
||||
- docs/予定/native-plan/README.md(Phase 8 節)
|
||||
- docs/説明書/wasm/*(ユーザー向けメモ)
|
||||
|
||||
------------------------------------------------------------
|
||||
|
||||
12. Phase 9: JIT (baseline) planning
|
||||
|
||||
Summary:
|
||||
- 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:
|
||||
- AOT/WASM の下ごしらえ(ビルド配線と最小 PoC)。
|
||||
- AOT の下ごしらえ(ビルド配線と最小 PoC)。
|
||||
|
||||
Scope/Tasks:
|
||||
- Cargo features/targets 整備、最小 wasm-bindgen 配線
|
||||
- Cargo features/targets 整備(将来のAOT配線)
|
||||
|
||||
Acceptance Criteria:
|
||||
- `wasm` ターゲットでのビルド雛形が通る
|
||||
- AOT 雛形/設計が通る(ビルド/テスト スケルトン)
|
||||
|
||||
------------------------------------------------------------
|
||||
|
||||
13. Phase 10: Packaging/CI polish
|
||||
14. Packaging/CI polish
|
||||
|
||||
Summary:
|
||||
- Windows/Linux の配布パッケージ化と CI 整備。
|
||||
@ -232,4 +255,3 @@ Scope/Tasks:
|
||||
|
||||
Acceptance Criteria:
|
||||
- リリースアーティファクトが自動生成される
|
||||
|
||||
|
||||
47
docs/予定/native-plan/issues/phase8_mir_to_wasm.md
Normal file
47
docs/予定/native-plan/issues/phase8_mir_to_wasm.md
Normal file
@ -0,0 +1,47 @@
|
||||
# Phase 8: MIR→WASM codegen (browser/wasmtime; sandboxed; Rust runtime free)
|
||||
|
||||
## Summary
|
||||
- MIR から素の WebAssembly を生成し、ブラウザ/wasmtime(WASI)でサンドボックス実行する。
|
||||
- Rust は「コンパイラ本体」のみ。実行は純WASM+ホストimport(env.print 等)。
|
||||
|
||||
## Scope
|
||||
- ABI/Imports/Exports(最小)
|
||||
- exports: `main`, `memory`
|
||||
- imports: `env.print(i32)`(デバッグ用に整数のみ。将来文字列ABIを定義)
|
||||
- メモリ/ヒープ
|
||||
- 線形メモリに簡易ヒープ(bump or フリーリスト)
|
||||
- Box の固定レイアウト(フィールド→オフセット表; 型名→レイアウトは暫定固定)
|
||||
- 命令カバレッジ(段階導入)
|
||||
- PoC1: 算術/比較/分岐/loop/return/print
|
||||
- PoC2: RefNew/RefSet/RefGet(Phase 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.md(Phase 8)
|
||||
- docs/説明書/wasm/*
|
||||
Reference in New Issue
Block a user