WebAssembly ↗(略称 Wasm)を使うと、Rust、Go、C などの言語を、Web ブラウザー ↗、Cloudflare Workers、そのほかの WebAssembly ランタイムを含む幅広い環境で動くバイナリ形式にコンパイルできます。
WebAssembly では次ができます。
-
WebAssembly.instantiate()を使い、JavaScript 以外の言語で書いたコードを実行できます。 -
Worker の JavaScript API を Rust コードから直接使えるバインディングを使い、Cloudflare Worker 全体を Rust で書けます。
ほとんどのプログラミング言語は Wasm にコンパイルできます。ただし、言語やコンパイラーによって対応状況は異なります。次の言語向けのガイドがあります。
WebAssembly は急速に進化している一連の標準であり、多くの提案 API ↗ がさまざまな開発段階にあります。一般に、Workers は Google Chrome で利用できる機能と同じセットをサポートしています。
Workers は SIMD に対応しています。WebAssembly での SIMD の使い方は Fast, parallel applications with WebAssembly SIMD ↗ を参照してください。
Workers ではスレッドは使えません。各 Worker は単一スレッドで動き、Web Worker ↗ API はサポートされていません。
WebAssembly へのコンパイルでは、追加のランタイム依存関係を含める必要がよくあります。そのため、WebAssembly を使う Worker は、同等の JavaScript で書いた Worker より大きくなりがちです。Worker が大きいほど、起動に時間がかかることがあります。詳細は Worker の起動時間 ↗ を参照してください。wasm-opt ↗ などのツールで Wasm バイナリのサイズを最適化することをおすすめします。
WebAssembly System Interface ↗(略称 WASI)は、ネットワーキング、ファイルシステムアクセスなどを対象にした一連のシステムコールを標準化する、WebAssembly 向けのモジュール式システムインターフェイスです。アプリケーションは WebAssembly System Interface に依存することで、ホスト環境やオペレーティングシステムが違っても同じ動作を期待できます。
WASI は Wasm より発展途上で、より急速に進化している一連の標準です。Cloudflare Workers での WASI サポートは実験的であり、実装されている syscall は一部だけです。WASI のオープンソース実装 ↗ と、使い方を紹介する Workers 上の WASI に関するブログ記事 ↗ を参照してください。