web-dev-qa-db-ja.com

WebAssemblyを使用してWebAPIメソッドを呼び出す

WebAssemblyで Web API を使用することは可能ですか?もしそうなら、どのように? ナビゲーターインターフェイス にもっと興味があります。

21
goo

はい、可能です。

WebAssemblyツールチェーンを使用するときにJavaScript APIを呼び出す方法は、その特定のツールチェーン次第です。これは事実上FFIの形式です。C++コードからは外部関数を呼び出しているように見えますが、ツールチェーンは埋め込み機能(ここではブラウザーのJavaScript)にブリッジします。いくつかの例:

Emscriptenなどのツールチェーンは自動的にWebAssembly.instantiateimportObjectを生成します(.htmlおよび.jsファイルとともに)/したがって、内部WebAssemblyの詳細のほとんどは通常非表示になります(私はそれらを文書化します)未満)。

この設計により、JavaScript APIだけでなく、任意のJavaScriptコードを呼び出すことができます。したがって、WebAssemblyから独自のJavaScriptコードを呼び出すことができます。ツールチェーンは、Web APIの一般的なセットを、場合によってはクロスプラットフォームの方法で簡単に処理できるようにします。 SDL2 オーディオ、キーボード、マウス、ジョイスティック、およびグラフィックスを実行します。

内部の詳細

WebAssemblyの JavaScript API を使用すると、 importObjectWebAssembly.InstantiateコンストラクターとWebAssembly.instantiate関数に渡すことができます。

new Instance(moduleObject [, importObject])

Promise<{module:WebAssembly.Module, instance:WebAssembly.Instance}>
    instantiate(BufferSource bytes [, importObject])

WebAssembly バイナリ形式 には インポートセクション が含まれています。ここで(LLVMなどのコンパイラを介して)使用するインポートを宣言します。これらのインポートされた各フィールドはimportObjectで検索され、関数 呼び出すことができます WebAssemblyのcallおよびcall_indirectオペコードを介して検索されます。

したがって、任意のJavaScriptを呼び出すことができ、JavaScriptは任意のWebAPIを呼び出すことができます。将来的には、WebAssemblyは エンベッダーがAPIを直接公開できるようにする機能を獲得 、これを埋め込むブラウザーには、DOM、キャンバス、イベントなどが含まれる可能性があります。

21
JF Bastien