Wasmtime 47でGCと例外処理がデフォルト有効に

मूल शीर्षक: GC and Exceptions in Wasmtime

यह क्यों महत्वपूर्ण है

多言語のWebAssembly対応が大幅に容易になり、Wasmエコシステムの拡大に直結する重要な節目となる。

Bytecode Allianceは2026年7月20日、WebAssemblyランタイム「Wasmtime 47」をリリースし、Wasm GCと例外処理の両提案をデフォルトで有効化した。これにより、より多くのプログラミング言語がWebAssemblyをターゲットにできるようになる。

Bytecode Allianceは、WebAssemblyランタイム「Wasmtime 47」において、Wasm GC提案と例外処理提案を両方デフォルトで有効化したと発表した。この実現には数年間にわたる大規模なエンジニアリング作業が必要だった。

Wasm GC提案以前は、オブジェクト参照モデルを採用する高水準言語は、独自のガベージコレクタを.wasmバイナリ内に埋め込む必要があり、バイナリの肥大化を招いていた。新提案では、Wasmプログラムが独自のstruct型・array型とサブタイプ関係を定義でき、インスタンスのライフタイム管理はランタイムが担当する。これにより、多くの言語がより効率的にWebAssemblyをターゲットにできる。

例外処理提案については、従来は例外を持つ言語が独自の呼び出し規約を実装し、すべての呼び出し箇所で正常返却か例外かを検査する必要があった。これがバイナリの肥大化と実行時オーバーヘッドを生じさせていた。新提案ではthrow/try/catchスタイルの構文が導入され、ランタイムはゼロオーバーヘッドの巻き戻しアプローチで実装できる。

WasmtimeのGC実装はCheney方式のセミスペースコピーコレクタを採用している。GCヒープはアクティブ領域とアイドル領域の2つに分割され、コレクション時に生存オブジェクトがコピーされる。割り当てはバンプポインタ方式で、読み書きバリアは不要。GCヒープの実装にはWebAssemblyリニアメモリを再利用しており、GCオブジェクトへの参照はネイティブポインタではなく32ビットインデックスとなっている。

स्रोत

bytecodealliance.org — मूल लेख पढ़ें →