概要
- Wasm 3.0 のリリース発表
- 64ビットアドレス空間 や複数メモリ、ガーベジコレクションなど大規模な新機能追加
- 例外処理 や 型付き参照、 テイルコール など多言語対応強化
- 決定論的プロファイル や カスタムアノテーション による柔軟性向上
- 主要ブラウザや Wasmtime などでのサポート進行中
Wasm 3.0の新機能概要
-
64ビットアドレス空間 ・メモリやテーブルで i64アドレスタイプ 利用可能 ・理論上 16エクサバイト まで拡張可能 ・Web上では 16GB 制限、非Web環境で大規模アプリ・データセット対応
-
複数メモリ対応 ・単一モジュールで 複数メモリ の宣言と直接アクセスが可能 ・モジュール間のデータコピーや 静的リンク ツール(wasm-merge等)への対応 ・セキュリティやバッファリング、計測用の分離アドレス空間活用
-
ガーベジコレクション(GC) ・ Wasmランタイム による自動メモリ管理領域の追加 ・ struct型・array型・タグ付き整数 でメモリレイアウト宣言 ・オブジェクトシステムやクロージャ等の高レベル機能は未搭載 ・各言語のコンパイラが独自にデータ表現設計
-
型付き参照 ・ 参照型の拡張 でヒープ値の正確な型記述が可能 ・ランタイムチェック不要な安全性確保 ・ 関数参照 にも適用、 call_ref命令 で安全な間接呼び出し実現 ・ サブタイピング や 型再帰 もサポート
-
テイルコール ・関数呼び出し時に スタック消費を抑制 ・静的/動的な呼び出し両方に対応 ・関数型言語や内部処理技法への最適化
-
例外処理 ・ ネイティブ例外処理 の導入 ・例外タグとペイロードデータで定義 ・例外のスローとタグによる選択的キャッチ ・ catch-all やタグ/ラベルペアによる分岐制御
-
リラックスドベクター命令 ・ SIMD命令 のパフォーマンス向上目的 ・一部動作を 実装依存 で許容 ・許可された選択肢から挙動を選択
-
決定論的プロファイル ・ 非決定論的命令 (浮動小数点演算やリラックスドベクター命令等)に 標準動作 を規定 ・ ブロックチェーン やリプレイ可能システム等での 完全な決定論的実行 を保証 ・プラットフォーム間の再現性・移植性向上
-
カスタムアノテーション構文 ・Wasmテキストフォーマットで 注釈記法 追加 ・バイナリのカスタムセクション相当の情報を 人間可読・編集可能 に ・標準自体は意味付与せず、下流標準で具体化可能
JavaScriptとの連携強化
- JS string builtins拡張 ・JavaScriptのstring値を externref としてWasmに渡す機能強化 ・新しいプリミティブライブラリの関数で Wasm内から直接文字列操作 が可能
多言語対応とエコシステム発展
-
高レベル言語対応強化 ・Java、OCaml、Scala、Kotlin、Scheme、Dart等が GC機能 を活用 ・新しい言語のWasmターゲット化が加速
-
SpecTecツールチェーン での標準策定 ・より 信頼性の高い仕様 文書化を実現
-
主要ブラウザ や Wasmtime 等スタンドアロンエンジンでのサポート進行 ・ Wasm feature status page で各エンジンの対応状況を追跡可能
Wasm 3.0の意義と今後
- 大規模アプリケーション や 多様な言語 のWasm対応促進
- パフォーマンス ・ 安全性 ・ 柔軟性 の向上
- 標準仕様の進化 によるWeb外での利用拡大
- 開発者・エンジン実装者 への新たな可能性