「WebAssembly 3.0」正式仕様が完成。16エクサバイトのメモリ空間に拡張、ガベージコレクション、テールコール、例外処理など
W3CのWebAssemblyワーキンググループは、WebAssemblyの最新仕様となる「WebAssembly 3.0」正式版が完成したことを明らかにしました。
WebAssemblyはもともと、Webブラウザ上で高速にアプリケーションを実行することを目的に策定されたバイナリフォーマットです。
しかし現在ではWASI(WebAssembly System Interface)と呼ばれる拡張機能の登場によって、サーバサイドにおけるクロスプラットフォーム対応の実行環境としても使われ始めています。
WebAssembly 3.0はそうした状況を受けて、サーバサイドでの実行に適した機能や性能向上に向けた仕様となっています。
WebAssembly 3.0の主な仕様
64ビットアドレス空間
WebAssemblyで利用可能なアドレス空間が64ビットになり、これまでの4ギガバイトから16エクサバイトにまで拡張されました。これによりサーバサイドでの大規模なアプリケーションにも対応できるようになります。
ガベージコレクション
アプリケーションによって割り当てられたメモリが参照されなくなり不要になったと判断されると、自動的に解放されます。これにより、JavaやPHP、Kotlinといったガベージコレクションを備えたプログラミング言語の実行系をWebAssemblyに移植しやすくなります。
複数のメモリ空間
単一のWebAssemblyモジュールが分離された複数のメモリ空間を定義し、利用や操作ができるようになりました。例えば、あるメモリ空間は別のプロセスとのデータのやりとりに使い、別のメモリ空間はプライベートに保つことで、アプリケーション内でのセキュリティを高めることが可能です。
型付き参照
実行時の型チェックを回避できるように、参照されるヒープの値の型を正確に記述できるようになりました。
テールコール
テールコールもしくは末尾再帰と呼ばれる、自身の再帰呼び出しがその処理における最後の処理になるような記述に対応しました。
例外ハンドリング
例外が発生した場合、その例がスローされ、タグによって適切なハンドラにキャッチされる処理が可能になりました。
その他多くの機能がWebAssembly 3.0の仕様で定義されていますが、そのいくつかはすでに広く実装され、利用可能になっています。
例えばガベージコレクションはすでに今年(2025年)1月にWeb標準のベースラインとなって広く使えるようになっています。
参考:WebAssemblyガベージコレクション機能がWeb標準の「Baseline」に。Safari 18.2でのサポート開始で
どのWebブラウザやサーバサイドのランタイムがどの機能をサポートしているかの詳細は、「Feature Status - WebAssembly」のページで参照することができます。