问题标签 [webassembly]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
246 浏览

webassembly - 是否可以生成 WASM 文件而不是 bundle.js?

据我了解,WASM 与 MSIL 的设计非常接近,但设计用于在浏览器中工作。所以它是代码的低级表示。

我可以生成 WASM 代码并将其连接到页面,而不是生成像 bundle.js 这样的 js-bundle 的缩小版本吗?

0 投票
1 回答
2908 浏览

javascript - 无法在“IDBObjectStore”上执行“放置”:无法克隆对象

当试图在 chrome 中存储已编译的 wasm 模块时,这是我得到的错误:无法在 'IDBObjectStore' 上执行 'put':无法克隆对象。

但根据 MDN,这应该是可能的。 https://developer.mozilla.org/en-US/docs/WebAssembly/Caching_modules

有解决办法吗?

0 投票
1 回答
2523 浏览

javascript - 从WebWorker同步获取数据?

虽然我知道 JavaScript 本质上是单线程的,并且通常不赞成此类事情,但我想知道是否有任何方法可以让 WebWorker 等待主线程提供一些数据,而不会破坏 WebWorker 的调用堆栈。

由于这是一个有趣的项目,我可以使用无法在旧浏览器上可靠运行的新技术和东西,只要它们有效,我不介意深奥的黑客攻击。

我考虑过的其他一些解决方案:

  • 在循环中不断轮询LocalStorage,直到在预定的key处有数据。这似乎可行,因为即使在循环中轮询时,其他线程的 LocalStorage 更新也应该对当前线程可见,从所有关于 LocalStorage 的线程安全性的讨论以及多个选项卡写入同一个 LocalStorage 键的情况来看。这种方法的缺点是它不是真正的“等待”,即工作线程仍然在 LocalStorage 上消耗全部 CPU 使用率。虽然 LocalStorage 通常使用锁来实现,但不可能长时间持有 LocalStorage 锁(锁被释放一次getItemsetItem返回)。

  • ECMA 脚本 6 yield。这在这里不起作用,因为它要求调用堆栈中的所有函数(直到您想要屈服的地方)都被标记为生成器函数。我想暂停我的 WebWorker 的地方有一个调用堆栈,其中包含 WebAssembly 函数,不能将其标记为生成器函数。

  • 索引数据库。这不起作用,因为 IndexedDB 不支持同步请求。

我知道这个类似的问题,但是这个问题专门讨论了这个onmessage事件,并且在 2012 年被问到,在yieldWebAssembly 被引入之前。

有没有办法以某种方式模拟 WebWorker 线程上的锁定,或者以其他方式,以便它会等到一些数据可用?

0 投票
1 回答
193 浏览

webassembly - 对于托管语言,语言运行时是否需要嵌入到 Web 程序集可执行文件中?

例如,如果 Microsoft 为 .NET 创建了一个 WebAssembly 目标,他们是否需要将 .NET 运行时嵌入到已编译的二进制文件中?如果他们不这样做,垃圾收集器和基类库之类的东西将如何工作?

0 投票
1 回答
1775 浏览

emscripten - 是否可以在 emcc 编译的 wasm 代码中导入 Javascript 函数?

我阅读了https://developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_APIhttp://webassembly.org/docs/js/,似乎我找到了从 wasm 调用 Javascript 函数的所有示例是用受 LISP 启发的语法编写的。

是否可以使用 emscripten C 在 wasm 中导入 JS 函数?

0 投票
1 回答
100 浏览

google-closure-compiler - 外部规则中的多个函数签名

我正在为 WebAssembly 编写闭包外部函数。

对于 function WebAssembly.instantiate,它有 2 个函数签名。

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

如何在闭包外部声明这两个规则?

参考:

https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstantiate

0 投票
1 回答
2541 浏览

webassembly - WebAssembly 会让音频 API 和 WebGL 过时吗?

我现在的问题是 WebAssembly 如何影响 Audio Api 和 WebGL?我的意思是音频 API 是高级别的并且依赖于 javascript 那么所有的音频操作、midi 等如何在 webassembly 中工作?我们是直接使用上述 API 还是使用其他一些第三方库,例如http://www.portaudio.com/?与 WebGL 一样,既然我们有低级访问权限,我们是直接使用 WebGL 还是 C++ OpenGL 接口?

0 投票
1 回答
1209 浏览

module - 如何检查 wasm 二进制文件的 WebAssembly 版本

给定一个.wasm文件,我如何检查二进制编码的版本


我一直在尝试使用 WebAssembly,但已经开始遇到我理解的版本控制问题,从而导致以下消息:

错误:Wasm.instantiateModule():Wasm 解码失败结果 = 预期版本 0c 00 00 00,找到 0b 00 00 00 @+4

或者

错误:Wasm.instantiateModule():Wasm 解码失败结果 = 预期版本 0c 00 00 00,找到 01 00 00 00 @+4

除了针对不支持给定文件的 WebAssembly 嵌入器运行它以获得上述错误之外,我如何检查 wasm 文件的版本?


编辑:根据最近的发行说明,这是一个有时间限制的问题,未来所有程序集的版本将0x1.

0 投票
1 回答
438 浏览

webassembly - WebAssembly 不能编译简单的类?

我一直在玩 WebAssembly Explorer 只是为了习惯一般概念,我相信我得到了错误的输出:

C++ 代码:

webassembly的输出:

老实说,这看起来不太对。为什么不显示功能?我实际上希望资源管理器导出一个看起来像这样的函数:

然而,它却假装对象是空的……这是为什么呢?

0 投票
2 回答
2590 浏览

webassembly - Webassembly多个模块?

假设我们有以下内容:

只是一个简单的模块,没有函数、本地变量、内存和所有花哨的东西。现在如果我不想过度填充我的模块怎么办?我的意思是 id 喜欢有两个模块,但是在尝试编译类似以下内容时显然会出错:

那么有没有办法给每个模块自己的内存或id?或者有什么办法吗?它甚至有意义吗?我只是说,因为一个模块真的可以变得很大。

我试图完成的是在两个模块之间进行通信,因为我相信防止模块变得太大是有意义的。我是 webassembly 的新手,所以我说的可能听起来很疯狂。

对于编译测试,我使用https://mbebenita.github.io/WasmExplorer/