WebAssembly
https://upload.wikimedia.org/wikipedia/commons/3/30/WebAssembly_Logo.png
「wasm」は「わずむ」と濁るっぽいmrsekut.icon
ブラウザ上で動作する低水準言語
ブラウザ外で実行する動きもある
ref Bytecode Alliance
JavaScriptより数十倍速い
事前にコンパイルし、バイナリ形式で配布するので速い
SIMDの利用、multi thread
Documet
github
WebAssembly のコンセプト - WebAssembly | MDN
WASI
WebAssembly News
2つの形式がある
.wat (テキスト形式)
.wasm (バイナリ形式)
#WIP
WebAssembly仮想マシン
.wasmを実行する
wasmをサポートしているブラウザに組み込まれている
用途の例
WebAssembly実装
/mrsekut-book-4296070762/018: 1.2 WebAssemblyの特徴と用途
軽くまとめたもの
WebAssemblyざっくり概要
ざっくりAssemblyScript
WebAssemblyをサポートする言語
https://zenn.dev/koduki/articles/9f86d03cd703c4
https://zenn.dev/hodagi/articles/4925afbeb3c4dc
WebAssemblyのGC
https://www.publickey1.jp/blog/23/webassemblychrome_111dartwebassembly.html
module
配布する単位
オブジェクトファイルみたいな
関数のリスト、グローバル(変数?),テーブル、メモリなどの定義
import, exportが可能
classみたいなもの
ここからinstanceを作成する
moduleを実体化したもの
型システム
https://html5experts.jp/chikoski/22523/
WASMモジュールの構造
のとこ
型にはそれぞれidが振られている
このidを用いて関数を型付けする
型は4種類
以下の組み合わせ
int, float
32bit, 64bit
オブジェクト、文字列は無理
論文のセクション4に書いてる
#あとで調べる
JSとの共存
以下はできる
JSからWebAssemblyのロード、実行
WebAssemblyからJS関数の呼び出し
Wasmer
wabt
https://github.com/WebAssembly/wabt/tree/master/wasm2c
逆にWebAssemblyからCを出力できる
実行する ref
JSファイルから読み込む
wasmファイルがブラウザ上でコンパイルして機械語に翻訳される
サイズが大きくなるとコンパイル時間も大きくなるが、従来のJSに比べれば高速
V8 v7.5からは、このコンパイル済みのモジュールがキャッシュされる
WebAssembly.compile
WebAssembly.instantiate(module)
moduleをインスタンス化したものを返す
誰かの実装してみた記事
https://qiita.com/kgtkr/items/f61612a82b8bebe779aa
関連ツール
The WASM Explorer
以下を比較できる
C, C++のコード
wast
Firefox x86 アセンブリ言語
LLVM x86 アセンブリ言語
FireFox右上の三角をクリック
WasmFIddle
Cからwasmを作って実際にブラウザで実行するところまでできる
ast.run
wasmのplayground
JavaScript vs WebAssembly easy benchmark
JSとwasmを実行して比較する
サイドバーから選んで「run」する
フィボナッチとか良い感じに2倍くらい差が出る
WebAssembly Studio
C, Rust, AssemblyScript対応のオンラインIDE
Mozilla製
「Build」した後に「Run」
ブラウザから機械語を実行できるWebAssembly用のオンライン開発環境「WebAssembly Studio」を使ってみた - GIGAZINE
Blockly  |  Google Developers
Blockly向けのAssemblyScriptコードジェネレータ
つまりコンパイルしてwasmを吐けるビジュアルプログラミング言語
wasmの分析
https://github.com/danleh/wasabi
WebAssemblyコンパイラを自作する ref
https://blog.scottlogic.com/2019/05/17/webassembly-compiler.html
https://speakerdeck.com/ryohey/typescript-te-webassembly-chu-li-xi-woshu-itahua?slide=29
ファイルサイズ
https://tech.aptpod.co.jp/entry/2019/12/03/102305
rust vs go
rustだいぶちいさい
WebAssemblyを呼び出すJavaScript側のAPI
WebAssembly - JavaScript | MDN
fetch()などを使って動的にロードする
#作成ネタ
https://another.maple4ever.net/archives/2770/
https://qiita.com/kgtkr/items/f4b3e2d83c7067f3cfcb
https://youtu.be/Ga8P_buwXnw?t=3918
wasmはめちゃくちゃ速くなるわけではないが、JSと比較して処理速度のブレが小さくなる
ブラウザをまたいでも
実際に使われているケースでは、パフォーマンス目的と言うよりは、既存のC実装のライブラリをブラウザで使用したい、といったものが多い
TensorFlow LiteとかFigmaも?
参考
https://eh-career.com/engineerhub/entry/2022/07/04/093000
実際はJSよりそんな爆速になるわけではない、など
Bringing the Web up to Speed with WebAssembly
Misreading Chat 22
WebAssembly が書ける言語まとめ | hifive開発者ブログ
WebAssemblyはなぜ速いのか | POSTD
jsのfetch,parse,最適化など順番にwasmと比較していてわかりやすい
S.F. Blog:WebAssemblyとAssemblyScriptの導入を考える
WebAssembly の基礎
1年間本番環境で WebAssembly ( by Emscripten )を使ってきた中で生じた問題とその解決策 - Qiita
S.F. Blog:WebAssemblyとAssemblyScriptの導入を考える
詳説WebAssembly
https://dev.to/nabbisen/webassembly--3385
http://atsushieno.hatenablog.com/entry/2020/01/01/121050
https://www.slideshare.net/llamerada-jp/webassembly-75175349
https://speakerdeck.com/d0iasm/webassembly-outside-of-the-browser
https://webassembly.sh/?run-command=python
https://nulab.com/ja/blog/nulab/basic-webassembly-begginer/