kumuのつぶやき

フロントエンド勉強中の学生のただつぶやき

WASMまとめ

WebAssemblyとは


バイナリコードをブラウザで動かせるようにしたもの。
JavaScriptは動的型付けのインタプリタ言語ということで、実行速度の遅さが課題となっている。
その課題を解決するため、2013年頃にasm.jsというサブセットが生まれたが、
ファイルサイズが大きくなってしまうことなどの問題があった。
その代替案として生まれたのがWebAssembly(wasm)である。

wasmはファイルサイズがasm.jsと比べて小さくなっている。
使用できる言語一覧 github.com
DOMの処理やFetchAPI、WebAudioなどのAPIも使用できる。
しかしwasmは、jsをすべて置き換えようというものではなく、高速化したい部分をwasmで記述し、
jsと併用することを想定されている。


いろいろなTool


emscripten周り

wasm-bindgen周り

  • wasm-bindgen

  • js-sys

  • web-sys

  • wasm-pack

バイナリ表現とテキスト表現関連のツール群

  • wabt



IoTでwasm


IoTデバイスでwasmを使用するという動きもある。
様々な言語がwasmへコンパイルできるようになっている。そのため、特定の言語に縛られることが無くなる。

wasmランタイ厶
  • Wasmer

  • WAMR

  • Lucet

  • Wasmtime


IoT × wasmについて liux120.github.io


名前が似ていて混乱するやつら(実際に混乱した)


  • wasm
    WebAssembly

  • wat
    WebAssembly Text Format(バイナリ表現のwasmをテキスト表現にしたもの。wasmのテキスト表現は.wat.wastが使われる。)

  • wast
    watと同じ (昔の呼び方?コードの形式が違うらしい。)

  • wabt
    WebAssembly Binary Toolkit (バイナリ表現とテキスト表現関連のツール群。)

  • wasi
    WebAssembly System Interface (安全にOSやホストシステムの機能を呼び出そうという仕様
    詳しくはStandardizing WASI: A system interface to run WebAssembly outside the web - Mozilla Hacks - the Web developer blog)

  • WAMR
    WebAssembly Micro Runtime (組み込みデバイスを目的としたランタイム)