【发布时间】:2018-06-10 21:28:18
【问题描述】:
我正在努力跟上 WebAssembly 的速度,主要依靠 WebAssembly developer's guide 和最近的 JSConf talk。我可以编译一个token hello world程序,我可以查看生成的HTML页面来查看结果。到目前为止一切顺利。
问题:18:22 的 JSConf 谈话建议我可以获取 wasm 文件,从响应中获取数组缓冲区,然后从缓冲区中实例化,我应该得到一个承诺。但是当我尝试这样做时——无论是在最新的 Chrome 稳定版、Chrome canary 还是最新的 Firefox 中——我都会得到type error。
错误消息似乎说我需要第二个“importObject”参数,尽管MDN documentation 说这个参数是可选的。更糟糕的是,MDN 页面几乎没有谈到 importObject 的结构和内容。我已经能够从谷歌搜索博客和 github 问题中收集到一些想法。看起来我可能需要一个“env”键和一个 WebAssembly 内存对象?
那么...为什么导入对象是必需的,即使它被记录为可选?在哪里可以找到导入对象的详细文档?为什么它在 JSConf 演讲中有效,但对我无效?
【问题讨论】:
-
一些提示为什么需要导入对象:想想 printf 在这种情况下如何打印到标准输出 console.log。 wasm 运行时不会重新实现浏览器中已有的内容。使用 emscripten 编译时,它会自动添加所需的导入。通常称为“emscripten 胶水代码”。要更好地理解这个问题,请查看 WASM SIDE_MODULE。独立:github.com/kripken/emscripten/wiki/WebAssembly-Standalone 进口:webassembly.org/docs/modules/#imports