WebAssemblyに興味をもった昨今、こちらのイベントで@chikoskiさんが「エコシステムとWebAssembly」というタイトルで登壇されていたので参加メモ
oss-x-users-meeting.connpass.com
Angry Botsの紹介
Unity WebGL Player - AngryBots WebGL Demo
- UnityがWebAssemblyでつくったブラウザで動くゲームのデモ
- WebAssemblyを使うとブラウザでこういうのが動かせるようになる
WebAssemblyはコンパイラーターゲット
- WebAssembly(Wasm)は C / Rust / AssemblyScript をコンパイルしてブラウザで高速に動かせるようにしたもの
- ブラウザの上でJavaScriptではないプログラム(C++など)を動かしたいというモチベーション
VimをWebAssemblyで動かしてブラウザ上で動かすツールの紹介
用途
Webアプリ
サーバレス環境
- Clouudflare Workers
- Compute@Edge
- Envoy
- Istio
Wasmに期待すること(エコシステムとパフォーマンス)
パフォーマンスについて
- 出始めはJSより高速だ!と言われていたが
- ブラウザのJSのAPIが充実しているので、JSをわざわざWasmに書き換えるのという感じではなくなってきた
- 最近はパフォーマンスがよいというか、パフォーマンスが安定している点で注目されている
エコシステムについて
- サーバーレス環境で動いたいたものをブラウザに持っていきたいけど、JSに書き直さなきゃいけない
→この労力が少なくなる
→ここに注目
プラグインとしてのWasm
ShopifyのWebAssemblyの利用事例
言語を選定する上で、Performance x Flexibility x Security のトレードオフがよく生まれるが
Wasmなら3つのニーズを満たせる
- Perfomance:サーバー内での実行、ネイティブコードの事前生成、生成したコードのキャッシュ
- Flexibility:言語しばりとかライブラリのバージョンとかがWasmにコンパイルできるならなんでも
- Security:メモリ保護、安全な実行コードの生成、アイソレーション
WebAssembly
→スタックベースの仮想マシン上で動く
→線形メモリー
→32bitすべて使える
コンパイル方法
どれかではなく、組み合わせたりしている場合もある(Safariなど)
辛いところ
- Wasmにバージョンがないが、仕様の対応はブラウザでまちまち
- データ表現に関する規定はない
→グルーコードが必要
→Interfact Typesが待たれる