概要
この記事は、残りのアドベントカレンダー期間をWebAssemblyとRustに費やして、少しでもWebAssemblyを理解しようとするためのメモです。
MDNのWebAssemblyの概要をスクラップしていく
WebAssemblyとは何か?
- 新たな機能と大幅なパフォーマンス向上を提供する新しい種類のコード
- C、C++、Rust 等の低水準の言語にとって効果的なコンパイル対象となるように設計
- ネイティブ水準の速度で複数の言語で記述されたコードをウェブ上で動作させる方法を提供
全然わからない。。。
他の記事も読見漁っていると、以下のようなものらしい。JavaでいうJVMみたいな感じ?
「仮想マシン上で動作するバイナリの命令形式」
生まれた背景は、JSよりももっと速くコードを実行できる方法が欲しかったためらしい?
JSと強調して動かせるWeb周辺の技術のうちの1つという感じで、基本的には計算しかできず、それがJSよりも速く実行できるように設計されている。
WebAssembly の目標
で、オープン標準として以下を目標に定めて作成されている。
- 高速で、高効率であり、ポータブルであること
- 可読性を持ちデバッグ可能であること
- 安全であること
- ウェブを破壊しないこと
WebAssemblyがどのようにウェブプラットフォームに適合するのか?
- 画像・動画編集
- ゲーム
- P2Pアプリケーション
- 画像認識
- VR・AR
- CADアプリケーション
- 科学的な視覚化とシュミレーション
... などなど
採用事例
WebAssembly の主要概念
- モジュール
WebAssembly.Module()
ステートレスの WebAssembly のコードであり、ブラウザーでコンパイルされ、効率的にワーカーと共有することができ、複数回インスタンス化することができます。
- メモリー
WebAssembly.Memory()
buffer プロパティが可変長の ArrayBuffer であり、これが WebAssembly の Instance からアクセス可能なメモリーのバイト列を保持しています。
- テーブル
WebAssembly.Table()
WebAssembly のテーブルを表す配列風の構造で、関数の参照を保持します。
- インスタンス
WebAssembly.Instance()
ステートフルで、実行可能な WebAssembly.Module のインスタンスです。
よくわからない。。。 何か作ってみるしかないか。。。
WebAssemblyをどのようにアプリで用いるか
- Emscripten を用いて C/C++ 製アプリケーションを移植する。
- アセンブリー水準で WebAssembly を記述もしくは直接生成する。
- Rust アプリケーションを書き、 WebAssembly を出力ターゲットとする。
- TypeScript によく似た AssemblyScript を用いて、 WebAssembly バイナリーに出力する
おまけ ChatGpt
WebAssemblyとは
WebAssembly (Wasm) は、Web ブラウザー上で実行されるプログラムを作成するための新しい技術です。Wasm は、ほとんどのプログラミング言語から生成される、独自の命令形式を持つバイナリフォーマットです。これにより、高速で、高品質な Web アプリケーションを構築することができます。Wasm は、Web ブラウザーと同様に、世界中の人々が利用することができるオープンな技術です。
参考
最後に
まだ全然わからないので、この記事に今後わかった概念等を追加していく可能性があります。あくまでメモです。
時間がある時にじっくり読みます。。。