WebAssembly
パラダイム式指向
WebAssembly(ウェブアセンブリ、公式の略称はWasm[2])は、実行可能ファイルを表現するための可搬なバイナリコード形式(およびそれに対応するテキスト形式[3])を定め、同時にそのような実行可能プログラムとホスト環境との間のやりとりを容易にするためのソフトウェアインタフェースを提供するものである[4][5][6][7]。
Wasmの当初の目的は、ウェブページ上で高パフォーマンスなアプリケーションを実現することであった。しかし「ウェブ特有の仮定は一切しておらず、ウェブ特有の機能を提供するわけでもないので、他の環境で同様に採用できる」[8]としている。Wasmはオープン標準であり[9][10]、あらゆるオペレーティングシステム上であらゆる言語をサポートすることを目指している[11]。実際に、最も有名な言語のすべてが、少なくともいくらかのレベルでWasmに対応している。
Wasmは、仮想の命令セットアーキテクチャあるいはプログラミング言語の一種[12]とも捉えられる。多くの場合、C/C++, Rustといったプログラミング言語のコンパイル先としてWasmバイナリが生成され、ウェブブラウザやその他のソフトウェア環境内で、スタックマシンによって実行される。ネイティブコードに近い高速さ、隔離環境でのメモリ安全な実行による安全性、仮想マシンによる可搬性やソースプログラミング言語中立性などを特徴とする[13]。
Wasmは2015年に発表され、2017年3月に初めてリリースされたWebAssemblyは、2019年12月5日にW3C勧告となり、2021年の ACM SIGPLAN のプログラミング言語ソフトウェア賞を受賞した[14]。World Wide Web Consortium (W3C) が技術標準を管理しており、有名な大企業なども加盟する非営利団体「Bytecode Alliance」が貢献している[15][16]。 WebAssembly という命名は、1950年代にまで遡る「アセンブリ言語」の概念を想起させるためのものであり、アセンブリのようなプログラミングを、Webのクライアントサイド(つまりユーザのWebブラウザを介したユーザのコンピュータ上)で実行される世界に持ち込むことを示唆している。これを実現するために、WebAssemblyは、真のアセンブリ言語に比べて圧倒的にハードウェア非依存でなければならない。 WebAssemblyの最初のアナウンスは2015年6月17日に行われ[17]、2016年3月15日に公開された初のデモは、主要ブラウザ (Firefox, Chromium, Google Chrome, Microsoft Edge) 上でUnityのAngry Botsを動かすものだった[18][19][20]。前身となった技術は、Mozillaによる asm.js
歴史
最初の目標としてCとC++からのコンパイルをサポートすることを目指し[23]、Rustがバージョン1.14以降で[24]、Goがバージョン1.11以降で[25]、Kotlin/Nativeがバージョン0.4以降で[26]で対応するなど、他のプログラミング言語のサポートも進められた。
2017年3月にMVPの設計が完了したことが宣言され、WebAssemblyに標準対応した初のブラウザとなるFirefox 52.0がリリースされた[27]。2017年11月、MozillaはMicrosoft EdgeがWebAssemblyに対応し、すでに対応しているChromeとFirefoxを含め、主要なブラウザすべてでサポートされたことを発表した[28]。2018年2月には、WebAssembly Working Groupが、3つのワーキングドラフト「Core Specification」「JavaScript Interface」「Web API」を公開した。
2019年6月に、Chrome 75は、WebAssemblyスレッドが有効にされた状態でリリースされた。
2019年12月5月に、W3C勧告「WebAssembly Core Specification」が策定され、WebAssemblyは正式なウェブ標準に認定された[29]。
2022年8月から、WebAssembly 2.0がドラフトの状態になり[30][31]、SIMD関連の多数の命令やv128データ型、関数が多値を返せる機能、大量のメモリの初期化・コピー、などが追加されている。
2023年10月から12月にかけて、Wasmランタイム側でガベージコレクション (GC) に対応する WebAssembly Garbage Collection (WasmGC) が、Chrome, Firefox, Edge の最新版でデフォルトで有効になった。