UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【WebAssembly】エコシステムとWebAssembly

WebAssemblyに興味をもった昨今、こちらのイベントで@chikoskiさんが「エコシステムとWebAssembly」というタイトルで登壇されていたので参加メモ

oss-x-users-meeting.connpass.com

Angry Botsの紹介

f:id:uggds:20210826231154p:plain 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の利用事例

shopify.dev

言語を選定する上で、Performance x Flexibility x Security のトレードオフがよく生まれるが

Wasmなら3つのニーズを満たせる

  • Perfomance:サーバー内での実行、ネイティブコードの事前生成、生成したコードのキャッシュ
  • Flexibility:言語しばりとかライブラリのバージョンとかがWasmにコンパイルできるならなんでも
  • Security:メモリ保護、安全な実行コードの生成、アイソレーション

WebAssembly
→スタックベースの仮想マシン上で動く
→線形メモリー
→32bitすべて使える

コンパイル方法

どれかではなく、組み合わせたりしている場合もある(Safariなど)

辛いところ

  1. Wasmにバージョンがないが、仕様の対応はブラウザでまちまち
  2. データ表現に関する規定はない
    →グルーコードが必要
     →Interfact Typesが待たれる

プラグインシステムにWasmを採用することのメリットまとめ

質疑

  • Wasmの開発のしやすさについて
    →Wasmのコードのデバッグは弱い
    Chromeならできるかが他のブラウザはできない

  • Wasmのこれからをどう思う?
    Javaのようなどこでも動くという体験がよい
     →言語しばりがなくなるので、その人が学んできたことが生かされそう