WebAssembly
ネイティブに近いパフォーマンスで動作するコンパクトなバイナリー形式の低レベルなアセンブリ風言語です。
from WebAssembly | MDN
略称:WASM
へー、そういう技術があるのかあtakker.icon
Uno Platformも裏側ではWebAssemblyを使っているらしい
bsahd.icon
JavaScriptのJITも発達してきたので必要性は薄そう
たらい回し関数
ネイティブ(int gcc -O0) 15.29s
ネイティブ(double gcc -O0) 16.98s
Node.js(普通のJS) 47.46s
Node.js(asm.js、直書き) 22.94s
emscripten(emcc -sWASM=0 -O0, Node.js) 43.41s
Python 8分以上
GCもどうせ走る(Javascript側で)のは変わらないし
もしかして普通のWebページ用途に限定して言ってる?Mijinko_SD.icon
3D ゲーム、仮想現実、拡張現実、コンピュータービジョン、画像/動画編集、その他ネイティブなパフォーマンスを必要とする多くの領域など、より集中的な使用例で JavaScript を使用しようとすると、パフォーマンスの問題に直面します
https://developer.mozilla.org/ja/docs/WebAssembly/Concepts
逆にこれ以外のアプリともあまり呼べないようなものだったら関係なさそう
JavaScriptが嫌いでC++が大好きという人の選択肢にはなるかもしれないけれど
既存の他言語の資源を活かすという点が大きいのかなbsahd.icon
それならemscriptenでよくね
wasm自体はスレッドができないし、マルチスレッドはweb workerで高速になる
RustとかからWebAPIが呼べるのは凄いけど、パフォーマンス的にはどうなんだろう?
web_sys - Rust
ブラウザで動くJavaScriptに代わる高速なランタイムという側面
例
ブラウザで動画再生 https://www.publickey1.jp/blog/22/amazon_prime_videowebassemblywasm_vm.html
最近はJVMのような汎用ランタイムとして使われ始めている
例
Envoyのプラグイン https://flattsecurity.hatenablog.com/entry/proxy-wasm
Cなどの低水準言語をサンドボックス環境で動かせるという側面もある
サンドボックス環境:ブラウザ外にダメージを与えない環境
ブラウザ外でも動かせるようにするWASIというものもある
WebAssemblyで動く言語をまとめてクロスプラットフォーム対応のソフトウェアにする技術
まだ開発中の技術
Wasmとは違ってシステムとの連携もできる仕様
Go言語でこのバイナリ作れると知って作ったのを思い出した。。懐かしい
from esbuild
bsahd.icon
wasm化は自分でビルドするだけでは?
元のGoコードをコンパイルしてwasmにしてますtakker.icon
既にevanwさんがコンパイルしたものが配布されていますが、もちろんuserがlocalでコンパイルする事もできます
(すみません言いたいことがいまいちわかってないです)
wasmはJavaバイトコードのような認識でいる
wasmはJavaバイトコードの再生産では
LLVM...はマシン語への中間言語なのか
中間言語なので容量の考慮が少なくて良い
wasmはJSとの連携が強化されているのかな
JVMは詳しくないのでわからないですtakker.icon
似てるなという気はしているinajob.icon
詳しい人に違いを説明してほしい気持ち
Oracleが作ってるかブラウザメーカーが作ってるかぐらいの違い?Mijinko_SD.icon
JVM との違い
Wasm はしばしば JVM(Java Virtual Machine)と比較されます。JVM と似ている点は「Write once, run anywhere」という点です。
しかし、 Wasm は対応している言語が多い、一つの企業に独占されていない、 サンドボックス環境である、起動速度が速い、メモリフットプリントが小さい、言語仕様が小さい、という点で異なります。
https://qiita.com/sachaos/items/e3a613b018febb898fde
起動速度にも差があるらしい
.NETのCLRとかもあるし、この系譜があるのかなー