Files
hakorune/docs/archive/proposals/nyir/vision_universal_exchange.md

45 lines
2.6 KiB
Markdown
Raw Normal View History

# NyIR を共通交換フォーマットにする計画All Languages → NyIR → All Targets
目的Goal
- あらゆる言語のプログラムを NyIR= Nyash MIR の公開版へ落とし、そこから任意の実行形態WASM/LLVM/VM/他言語)に変換する。
- 最適化は二の次。まずは意味保存semantics-preservingを最優先で実現し、可搬性と一貫性を担保する。
中核方針Core Policy
- NyIR Core26命令は基本セマンティクス凍結。ExternCallによる外部世界接続を含む。
- 拡張は NyIR-Extexceptions/concurrency/atomicsで言語固有機能を段階導入。
- Everything is Box哲学: 外部ライブラリもBIDによりBox統一インターフェースで利用。
- 仕様の正本は `docs/nyir/spec.md` に集約CoreExt
必要拡張Minimal Additions
- 例外/アンワインドThrow/TryBegin/TryEnd
- 軽量並行/非同期Spawn/Join/Await
- アトミックAtomicRmw/CAS + ordering
→ 詳細は `docs/nyir/spec.md` の NyIR-Ext 参照
フロントエンド指針Language → NyIR
- C/C++/Rust: 既存IRLLVM IR経由または専用パーサでサブセットから対応
- 例外→NyIR-Ext exceptions or エラー戻り値
- スレッド→Spawn/Join、atomic→CAS/RMW
- Java/Kotlin: JVM bytecode から構造復元→NyIR例外/スレッド/同期をExtへ
- Python/JS/TS: AST→NyIR。辞書/配列/プロトタイプは標準Boxへ写像、例外/非同期はExtへ
- Go: panic/recover→exceptions、goroutine→Spawn/Join へ写像(将来)
バックエンド指針NyIR → Target
- WASM: 同期・非例外・非スレッドの最小路線から段階対応Exceptions/Threads提案に合わせ拡張
- LLVM: 例外/スレッド/アトミックが揃っているため先行実装が容易
- VM: 仕様の正しさ検証の基準(簡易実装でも良い)
- 他言語(ソース生成): 可読性/慣用性は課題だが、機械的変換は可能(優先度低)
検証計画Golden/Diff
- Cサブセット→NyIR→C/WASM例外なし・CASあり
- Python/JSサブセット→NyIR→WASM辞書/例外/非同期のサブセット)
- JVM系→NyIR→JVM bytecode例外/スレッド)
- Rustサブセット→NyIR→LLVM所有・weakの温存
→ Golden NyIR を用い、interp/vm/wasm/llvm で出力一致をCI検証
関連リンク
- NyIR 仕様: `spec.md`
- ABI/BID: `../予定/native-plan/box_ffi_abi.md`
- 9.10 タスクCopilot向け: `../予定/native-plan/issues/phase_9_10_nyir_spec.md`