WebAssembly Advent Calendar 2018の1日目です。
WebAssembly:バイナリフォーマット
WebAssemblyとはソフトウェアパッケージを記述するためのバイナリフォーマットの1種です。WebAssemblyコミュニティグループで機能が議論され、W3Cでその仕様が定められています。
その特徴は以下の4点です。
- 安全
- ポータブル
- 高速
- Webのエコシステムに組み込める
Webブラウザの上で高速にプログラムを動かすには、サイズを小さくできるバイナリフォーマットが必要で、しかも効率良いネイティブコードへ変換を助ける情報が必要、という2つの要求を満たすために議論が始まったという経緯のため、Webブラウザの上で動くために必要な上記の特徴を持っている点が興味深いフォーマットとなっています。
利用できる環境
Apple, Google, Microsoft, Mozillaのモダンなブラウザベンダが初期から議論に参加しているため、現行のほとんどのモダンブラウザの上で利用できます。
- Chrome
- Safari
- Edge
- Firefox
上記のブラウザは、モバイル版も含め動作します。
Chromeの場合、そのJavaScript処理系であるV8の一部としてWebAssemblyの処理系を実装しています。そのため、V8を利用しているnode.jsでもWebAssemblyが動作します。
利用例
利用例は上記の4点のどれを重要視するかによってカテゴリー分けできます。安全であることは、大前提であることもあるので、利用目的は次の3つに大別できます。
- ブラウザ上の動かすプログラムの高速化
- 既存ソフトウェア資産を利用したWebコンテンツの作成
- ユニバーサルバイナリとして利用
それぞれの例は、別の記事で参照することにします。
開発に使える言語
開発の方法は2つあります。
1つはWebAssemblyをターゲットとしたコンパイルを行う方法で、C / C++ / Rust / Go などが利用できます。
もう1つはWebAssemblyに出力されたインタプリタを使って、他の言語で書かれたプログラムを動かす方法です。PerlやLUAなどが代表例です。
まとめ
JS以外の言語で書かれたプログラムをWebの世界にもちこめるのがWebAssemblyの成果です。その特徴のどれを生かすかによって、面白い使い方が見えてくるかと思います。