WebAssembly 【WASM】
概要
WebAssembly(WASM)とは、Webブラウザなどを主な実行環境として利用できるプログラミング言語の一つで、仮想的なCPUの命令セットのような構造を持つもの。ネイティブコードのように高速に実行できる。実在しない架空のマイクロプロセッサ(CPU/MPU)が持つ機械語(風の言語)として定義されており、標準の記述形式も16進数のバイナリコードとなっている。機械語に一対一に対応するテキスト形式のアセンブリ言語(風の言語)も定義されており、これを使って直にプログラムを記述することもできる。
これらの言語仕様を用いて人間がプログラムを記述するよりも、C言語やC++言語のようなネイティブコードにコンパイルしてから実行するプログラミング言語のコンパイル先としての利用を想定している。こうした言語は実行速度が高速な反面、Webブラウザなどには実行環境が存在せず利用できなかったが、WebAssembly形式にすることでブラウザ上で高速に実行することができるようになる。
WebAssembly自体は特定の実在のCPUのコードではないため、実行時には仮想マシン(VM)がコードを解釈して実行環境のCPUの命令に変換しながら実行していく形となる。スクリプト言語の実行に近い方式だが、一般的なCPUの命令セットに似た構造となっているため、構文の解釈や変換は極めて高速に行うことができる。
一方、独立した仕様になっていることで仮想マシンを用意すれば様々な機種やOSに対応することができる利点もある。仮想マシンを経由して実行するためネイティブコードより安全性が高い。特定の環境や用途で必要になるDOM操作やシステムコールといった機能は実行環境側に用意してAPIを介して利用する形をとっている。ブラウザ上ではJavaScriptプログラムと連携することも可能となっている。
コンパイラを用意すれば様々なプログラミング言語からコードを生成することができ、C/C++の他にRustやGo言語、Kotlin/Nativeなどに対応するコンパイラが公開されている。Javaや.NET言語(C#など)のような独自の仮想マシンを持つ言語は非対応となっている。
WebAssemblyの開発はWebブラウザ「Firefox」開発元であるMozilla Foundationの技術者らが主導し、Firefoxでスクリプト実行を高速化する「asm.js」から発展した。2015年に最初の仕様が公開され、2017年までにFirefoxやGoogle Chrome、Microsoft Edge、Apple Safariなど主要なブラウザへの実装が完了した。2019年にはW3Cが標準規格を発行した。ポータブルで高速なプログラム実行環境としてブラウザ以外への実装や応用も進んでいる。