W3Cが発表 最近投稿を通じて 新しい仕様のドラフト の準備コードを標準化する WebAssembly2.0および関連するAPI ブラウザやハードウェアプラットフォーム間で移植可能な高性能アプリケーションの作成を可能にします。
WebAssemblyを初めて使用する場合は、次のことを知っておく必要があります。 これは一般的なミドルウェアを提供します、低レベルおよび ブラウザに依存せず、コンパイルされたアプリケーションを実行します さまざまなプログラミング言語から。 JIT for WebAssemblyを使用することで、ネイティブコードに近いレベルのパフォーマンスを実現できます。
WebAssemblyについて
WebAssembly ブラウザで高性能タスクを実行するために使用できますC / C ++などのコンパイル言語で記述されたコードを実行することによる、ビデオエンコーディング、オーディオ処理、3Dおよびグラフィックス操作、ゲーム開発、暗号化操作、数学計算など。
WebAssemblyの主なタスクの中には、移植性、動作の予測可能性、およびさまざまなプラットフォームでのコード実行のIDの提供があります。 最近、WebAssemblyは、ブラウザーに限らず、あらゆるインフラストラクチャ、オペレーティングシステム、およびデバイスで安全にコードを実行するためのユニバーサルプラットフォームとしても宣伝されています。
WebAssembly2.0ドラフトについて
WebAssembly以降に行われた変更の一部として、WebAssembly 2.0の提案は、固定幅SIMD、大容量メモリ操作、参照タイプ、WebAssemblyi64のJavaScriptBigIntサポート、複数の戻り値のサポート、および可変のインポート/エクスポートです。グローバル変数。
W3Cは、2.0つのドラフトWebAssemblyXNUMX仕様を公開しています。
- Web Assembly Core: 中間WebAssemblyコードを実行するための低レベルの仮想マシンについて説明します。 WebAssemblyに関連するリソースは、Javaの「.class」ファイルに似た「.wasm」形式で提供されます。このファイルには、静的データとそのデータを処理するためのコードセグメントが含まれています。
- WebAssembly JavaScriptインターフェース: JavaScriptと統合するためのAPIを提供します。 値を取得し、WebAssembly関数にパラメーターを渡すことができます。 WebAssemblyの実行はJavaScriptセキュリティモデルに従い、ホストとのすべての対話はJavaScriptコードの実行と同様に実行されます。
- WebAssembly Web API: 「.wasm」リソースをリクエストして実行するためのPromiseメカニズムに基づくAPIを定義します。 WebAssemblyリソース形式は、ファイルが完全にダウンロードされるのを待たずに実行を開始するように最適化されているため、Webアプリケーションの応答性が向上します。
WebAssemblyとWebAssembly2.0の違い
また、WebAssembly 2.0には、標準の最初のバージョンと比較していくつかの重要な変更があることに注意してください。
- v128ベクタータイプのサポート および関連するベクトル命令により、複数の数値に対して並列に操作を実行できます(SIMD、単一命令、複数データ)。
- 可変グローバル変数をインポートおよびエクスポートする機能、C++のスタックポインタとして値のグローバルバインディングを可能にします。
- floatをintに変換するための新しい命令、結果オーバーフローで例外をスローする代わりに、可能な最小値または最大値を返します(SIMDに必要)。
- 整数の符号を拡張するための手順 (符号と値を維持しながら、数値のビット深度を増やします)。
- ブロックと関数による複数の値を返すためのサポート (および複数のパラメーターを関数に渡す)。
- JavaScript関数BigInt64ArrayおよびBigUint64Arrayを実装します JavaScriptタイプBigIntと64ビット整数のWebAssembly表現の間で変換します。
- 参照型のサポート (funcrefおよびexternref)およびそれらに関連するステートメント(select、ref.null、ref.func、およびref.is_null)。
- memory.copy、memory.fill、memory.init、およびdata.drop命令 メモリ領域間でデータをコピーし、メモリ領域を削除します。
- テーブルへの直接アクセスと変更の手順 (table.set、table.get、table.size、table.grow)。
- XNUMXつのモジュールで複数のテーブルを作成、インポート、およびエクスポートする機能。 バッチモードでテーブルをコピー/入力する関数(table.copy、table.init、elem.drop)。
最後に、それについてもっと知りたい場合は、詳細を調べることができます 次のリンクで。