第一システム部の小浜です。

今回はWebAssemblyについて簡単に調べてみました。

参考文献

用語解説

■ WebAssembly(WASM)

WebAssemblyは、ブラウザ上においてネイティブレベルのパフォーマンスで
動作することを目的に策定されたバイナリフォーマットです。
C/C++/Rust/Goなどのプログラム言語をコンパイルしてWASMとして動かすことができます。

■ WASI

WASIとは、WebAssembly System Interfaceの略で、
WebAssemblyをブラウザ以外の環境で実行するためのシステムインターフェイスです。
このインターフェイスによって、WASMがOSのリソースにアクセスできます。

アプリケーションのバイナリファイルは同じもので、異なるCPU, 異なるOS上で動作するファイルとなります。

まとめると以下になります。

  • WASMはブラウザ上で動作できるようにWebAssemblyのcore APIにJavascriptインターフェイスとWeb apiを加えたもの。
  • WASIはOS上で動作できるようにWebAssemblyのcore APIにWASI API(POSIXライク)を加えたもの。

WASIの実装として、Wasmer ( https://wasmer.io/ ) や WasmEdge ( https://wasmedge.org/ ) 、Wasmtime ( https://wasmtime.dev/ ) などがあります。

WebAssemblyベンチマーク

WASMはブラウザ上で実行するので、WASM版とJavaScript版の実行速度が比較できるような作りのサイトになっています。

2022/08 現在、JavaScriptの方が高速になっているテストケースが多く、少々意外な結果でした。

JavaScript実行エンジンの高速化は目覚ましいです。

感想

実行速度という点ではWASM/WASIに利点があまり無いように感じます。

ネイティブバイナリを生成するC/C++/Rust言語は別として、JavaScriptはかなり高速に動作すると認識を改める必要がありそうですね。

中間バイトコードに変換して実行するタイプの言語(Javaなど)でも実行速度でJavaScriptに負ける可能性も出てきそうです。

TOP
TOP