WebAssemblyコミュニテイグループの議長を務めるBen Smith氏がWebAssembly Summitで講演し、WebAssemblyの創成期から、スコープと機能を洗練し続けたこれまでの道程を振り返った。
氏は熱意を持って聴衆を見渡し、次のような思いを語った。
5年前には、WebAssemblyは文字通り、存在さえしなかったのです。
CとC++をコンパイルしてブラウザ上で実行するというアイデアが概念実証の段階を越えられたのは、2013年のemscriptenとasm.jsによる成果だった。2010年にemscriptenを設立し、WebAssemblyとasm.jsの開発にも携わったAlon Zakai氏は、CとC++をWebに移植することが可能であるという、確実なエビデンスを提供した。
2015年4月には、数人の開発者がバイナリおよびテキスト形式のWebAssemblyの実行に成功した。その当時、Wasmの最終的な目標は次のように表現されていた。
- Webコンパイルターゲットとして機能することのできる、可搬性とサイズ、ロード時間効率に優れたバイナリ形式の定義
- バイナリフォーマットと同型かつ双方向の変換が可能で、人による編集の可能なテキストの定義
- クライアント上でのasm.jsへのコンパイルを通じた(ロード時間およびパフォーマンス面で)効率的なポリフィル(polyfill)を実現可能なv.1の設計
- 基本的にasm.jsで実行可能なMVP(Minimum Viable Product)としてのv.1の設計
- 既存のWebプラットフォームとの統合性に優れた設計
- バージョンレス、機能テスト、後方互換性といった、Webの進化のストーリに沿った設計
- 非ブラウザ環境でも実行可能な設計
ここから、コンパイル可能であることが第1の目標に、CとC++ソフトウェアをWebアプリケーションとして適切なスピードで実行するという、asm.jsの機能に適合する範囲を越えない機能の実行が第2の目標に、それぞれ定められた。どちらかというと控え目なこの目標が、結果として多くの賛同者を集めることになったのだ、とSmith氏は述べている。非ブラウザ環境での実行を可能にしたいという考えは当初から持っていたが、最初の目標では、単にそのような実行が可能な設計であることに留めて、最終的な実現方法の詳細はスコープの範囲外にすることにした。
これら初期目標で始まったWebAssemblyは、その後成長を続けて、スコープと仕様も洗練されていった。Smith氏はその進化を、A.P.I.E.、すなわちAbility(Wasmには何ができるのか)、Producer(Wasmを作るのは誰か)、Interoperability(Wasmは他に誰が解釈できるのか)、Embedder(Wasmを使うのは誰か)から着想を得た、パイのメタファに集約している。講演の以降の部分では、これら4つのカテゴリがその後、どのようにしてWebAssembly言語の言語提案を積み重ねて、比喩的表現としてのパイの拡張を達成したのかが紹介された。
2017年11月、ガベージコレクション(APIEフレームワークでのAbilityとProducer)と、Interoperabilityに必要な機能としてのホストバインディングがWebAssemblyに加えられた。2018年、EmbedderカテゴリにWasm C APIが追加された。2019年8月、Typed Function ReferencesがAbilityカテゴリに、Type Import、WASI、Interface TypesがInteroperabilityカテゴリに加えられた。
これら新たなプロポーザルは、ガベージコレクションやホストバインディングといったこれまでの成果に加えて、高レベル言語をWebAssemblyにコンパイルした経験から導かれたものだ。例えば、ホストバインディングのプロポーザルはすでに存在せず、Interface Typesプロポーザルに吸収されている。パイは成長を続けており、現在ではWASIとInterface Typesが独自のグループやサブグループを構成するまでになっている。その他、SOIL(Single Open Intermediate Language)などのイニチアチブも、WebAssemblyの成長に大きく貢献している。
ここで紹介した以外の技術的な詳細や歴史面での話題、イラストなどを含んだ氏の講演"WebAssembly: Expanding the PIE"のすべてを、SummitのWebサイトで見ることができる。
WebAssembly Summitはシリコンバレーで、2020年2月10日に開催された。WebAssemblyに関するすべてを取り上げた、単日単一トラックのカンファレンスである。