2017-12-31 19 views
1

私はWebAssemblyで速度を上げようとしており、主にWebAssembly developer's guideと最近のJSConf talkに依存しています。私はトークンのhello worldプログラムをコンパイルすることができ、結果を見るために生成されたHTMLページを見ることができます。ここまでは順調ですね。WebAssembly:TypeError:WebAssemblyインスタンシエーション:インポート引数が存在する必要があります

問題点:18:22のJSConfの講演では、wasmファイルを取得し、応答から配列バッファを取得し、バッファからインスタンス化することができ、私は約束を返すべきだと示唆しています。しかし、私がそれを試してみると、最新のChromeの安定版でも、Chromeのカナリアンでも、最新のFirefoxでも、代わりにtype errorが得られます。

MDN documentationにこの引数がオプションであると表示されても、エラーメッセージは2番目の "importObject"引数が必要と思われるようです。 MDNページでは、importObjectの構造と内容についてほとんど話していません。私はブログやgithubの問題のためのグーグルからいくつかのアイデアをまとめることができました。私は "env"キーとWebAssemblyメモリオブジェクトが必要なようですね?

だから、インポートオブジェクトはオプションであると文書化されているにもかかわらず、なぜ必要なのですか?インポートオブジェクトの詳細なドキュメントはどこにありますか?なぜそれはJSConfの話では機能しますか?

+0

なぜインポートオブジェクトが必要なのかについてのヒント:printfがstdoutに出力する方法については、この場合はconsole.logを考えてください。 wasmランタイムは、ブラウザで既に利用可能なものを再実装しません。 emscriptenでコンパイルすると、必要なインポートが自動的に追加されます。主に "emscripten glue code"と呼ばれています。この問題を理解するには、WASM SIDE_MODULEをよく調べてください。 スタンドアロン:https://github.com/kripken/emscripten/wiki/WebAssembly-Standalone インポート:http://webassembly.org/docs/modules/#imports – Karl2011

+0

https://stackoverflow.com/questions/45295339/何らかの形でビルドすることができます - webcembly-code-without-the-emscripten-glue – Karl2011

答えて

2

インスタンス化するモジュールが何もインポートしない場合にのみ、インポートオブジェクトを省略できます。それ以外の場合は、必要なすべてのインポートを含むオブジェクトを提供する必要があります。モジュールは、その後、あなたはもちろん

{ 
    a: {f: function (...) { ... }, g: function (...) {...}}, 
    b: {m: new WebAssembly.Memory(...)} 
} 

などのインポートオブジェクトを提供する必要があり

(import "a" "f" (func ...)) 
(import "a" "g" (func ...)) 
(import "b" "m" (memory 0)) 

した場合、実際の輸入値も事前に定義されたオブジェクト、または別のWasmから、より興味深いの輸出することができインスタンス。

関連する問題