WebAssembly
jsの置き換えを目指していない
.wat はS式化されたテキスト形式で人が読める
wabt というツールをつかってやる
(module ...) という大きなS式がコードの単位になる。
wasm のサポートする型は i32, i64, f32, f64 の4つ
wasm の線形メモリの世界 → チューリング・マシンのテープ的な?
wasm はメモリ番地に「何かのデータ」の読み書きしたという操作の世界観(?)
Rustには wasm-bindgen というツールで Rust/js/wasm の連携が楽になる
Rustの公式ツールの一つ
ーーーー
wasm ファイルはバイナリだが、意味的にはモジュール
中にはいくつかのセウションがある。
関数が中にあり、それをエクスポートしたり。
関数には引数の型、返り値の型がある。
codeセクションには実際のasmコード。
wasmは単体で完結するので、start-sectionがある
dataセクションがある。
独立性が高い。
表現系として wasmバイナリ、watというテキスト表現。この2つは相互変換が可能。
AutoDesk/AutoCAD のウェブ版を wasm で google と協力して出した
scketchUp も wasm
GoogleEarthも中で wasm/各プラットフォームにかかわらず
SoundScrap というソフト/ wasm の thread や audio worklet を使う。
クラウドゲーミングの parsec / 音のコーデックで wasm を使っている。
Unityがwasm正式対応。
Perlのwasm版・WebPerl
早くする・既存の資産(Cで枯れた実装がある)をwasmで使うというのが多いかな。
ユニバーサルバイナリとしてのwasmという考えも多くなってきた
プラットフォーム独立なバイナリフォーマットとしての着目が多い
wasmer
life vm /made by go
wasmachine / FPGA
wasm のモデル → 実際のCPUの命令列に変えて実行
wasm の threads
最新仕様で使えるようにに皆さん頑張り中とのこと
webworker / wasm thread に対応させるようにした。
webworker は data sharing ができない。なので threads 間の協調動作ができない。
Shared ArrayzBuffer というのが作られた。
しかし。。。。 SPECTRE の脆弱性がでてきた。
Shared ArrayBuffer が一旦止まった。
chromeチームが頑張って、プロセス空間を分けるなどして問題解決して使えるようにした。
i32.atomic というような仕様ができた。(mutex処理)
WebGL/Wasm
webgl とは?
GPUを用いて、という部分が大事!3DCG関連。
glsl を使う、これは wasm にはならない
連携部分をwasmで書くと
AssemblyScript
ts の subset -> wasm になる言語
https://upload.wikimedia.org/wikipedia/commons/3/30/WebAssembly_Logo.png