WebAssembly
WebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable target for compilation of high-level languages like C/C++/Rust, enabling deployment on the web for client and server applications.
http://webassembly.org/
https://www.w3.org/community/webassembly/ で標準化されている
C/C++/Rustで書いたコードをWebアプリ(実際にはWeb以外にも)利用できる
例:FFmpeg.wasmを使ってブラウザだけで動画をトランスコードする
https://github.com/ffmpegwasm/ffmpeg.wasm
2021年7月1日 WebAssemblyアプリ開発で最も使われている言語はRust、注目の機能はスレッドなど。The State of WebAssembly 2021 - Publickey
WebAssemblyで、JITコンパイラに迫る高速なJavaScriptエンジンを実装へ。Bytecode Allianceが技術解説。JavaScript以外の言語でも - Publickey 2021年6月7日
WebAssemblyで実装できるのはインタプリタとしてのランタイムであり、ネイティブに実装されたJITコンパイラのような、ネイティブコードを動的に生成して実行するといったことは、言語の仕様上できません。
では、WebAssemblyによるランタイムは、JITコンパイラを採用したランタイムよりもつねに遅い実行速度しか期待できないのかと言うと、そうではないと、Bytecode Allianceのブログに投稿された記事「Making JavaScript run fast on WebAssembly」で解説されています。
WebAssemblyでJITコンパイラに迫る実行速度のJavaScriptエンジンが実装できれば、瞬時に起動するサーバレスコンピューティングのJavaScriptエンジンや、JITコンパイラが許されていないiOS上での高速なJavaScript実行が可能になります。
現状は?
この実装をWebAssemblyランタイムの「Wasmtime」とMozillaのJavaScriptエンジンである「SpiderMonkey」、そして事前初期化ツールの「Wizer」を組み合わせて進めているとのこと。
https://www.youtube.com/watch?v=gk9ERa7UYPM
WebAssembly は「速度が速い」というメリットもあるのですが、それよりも 「過去の資産がbrowserで利用可能になる」 メリットの方がより魅力的であると自分は考えています。
http://nmi.jp/2022-02-08-Porting-LibRaw-with-Emscripten
https://developer.chrome.com/devsummit/schedule/wasm
WebAssembly の概要 - WebAssembly | MDN
WebAssembly は最近のウェブブラウザーで動作し、新たな機能と大幅なパフォーマンス向上を提供する新しい種類のコードです。
基本的に直接記述ではなく、C、C++、Rust 等の低水準の言語にとって効果的なコンパイル対象となるように設計されています。
目標
高速で、高効率であり、ポータブル
WebAssembly のコードは 共通ハードウェア対応環境 を利用して異なるプラットフォーム間でネイティブ水準の速度で実行可能です。
可読性を持ちデバッグ可能
WebAssembly は低水準のアセンブリ言語ですが、人間が読めるテキストフォーマットを持ちます(その仕様策定は終わっていないものの)。
このフォーマットは人の手で読み書きできて、デバッグもできます。
安全
WebAssembly は安全でサンドボックス化された実行環境上で動作するように設計されています。
他のウェブ言語と同様に、ブラウザーに対して same-origin および権限ポリシーの確認を強制します。
他のウェブ技術と協調し、後方互換性を維持
事例
/koushisa/FigmaのコアはWebGLとWASMで動いている