问题标签 [wasm-bindgen]

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 回答
175 浏览

rust - 如何将特征绑定到使用 document.create_element 构建的元素

使用 Rust 和wasm-bindgen.

用 构建元素document.create_element(tag),它返回一个web_sys::Element。元素被转换为特定类型,具体取决于标签,例如web_sys::HtmlButtonElement. 这可行,并且还放入了一个小包装器,用于设置元素类型特定的构建器。

这是有效的,一个HtmlButtonElement是用:

let buttonElement = BUTTON_ELEM.build_element();

现在我寻找一个特征 Bound,它限制为可以从web_sys::Element. 例如HtmlSpanElement, HtmlDivElement, ..., HtmlButtonElement

附加或替换 Bound to wasm_bindgen::JsCastin impl<T : wasm_bindgen::JsCast>,可以这样做吗?

0 投票
1 回答
1231 浏览

rust - 如何在 WASM-Bindgen 和 Rust 中实际获取响应正文的文本

也许这是一个简单的问题,但我还没有在任何地方找到答案。我已经搜索了文档,但是我在整个互联网上找到的用于 web-sys fetch 的单个示例仍然没有解决这个问题(官方文档,不少于)。

您如何从 web-sys 请求中获取响应正文?它具有 JsFutures 和展开的所有这些开销,我实际上似乎无法找到正确的方法来将我的数据放入字符串中。我只是试图从(本地主机开发)服务器检索文件,然后将其解析为 WebGL 程序的顶点着色器,但我什至无法获取它的字符串或以任何方式从中读取。

0 投票
1 回答
222 浏览

wasm-bindgen - 如何使用 wasm-bindgen - 导入具有多个模块级别的 js

以下示例https://github.com/rustwasm/wasm-bindgen/tree/master/examples/import_js工作正常。下一步我尝试导入具有 2 级模块的 js 模块。让我们MyClass用 来引用mylib.part1.MyClass

在 rust wasm-bindgen 文件中,我尝试使用以下命令导入:

这会产生构建错误:

是否可以在 中进行导入wasm-bindgen?替代一些解决方案,在没有 2 个模块级别的 js 中重新导出(尝试过,但没有管理)。

0 投票
1 回答
816 浏览

rust - 用 Rust 处理 WebAssembly 中的闭包而不是使用忘记和泄漏内存有什么更好的方法?

当使用Closures向 JavaScript 提供回调时,有什么更好的方法来避免释放它们?wasm -bindgen 指南建议使用.forget,但承认这本质上是内存泄漏。

通常我们会存储句柄以便稍后在适当的时间删除,但现在我们希望它是一个全局处理程序,所以我们使用该forget方法删除它而不会使闭包无效。请注意,这会在 Rust 中泄漏内存,因此应该明智地执行此操作!

它暗示将闭包存储到适合丢弃的时间。在alexcrichton 对一个问题的回答中,他提到...

[...] 如果它 [...] 只被调用一次,那么您可以使用Rc/RefCellClosure闭包本身放入内部(使用一些内部可变性恶作剧)

但他没有提供这种方法的例子。

Closure 文档还提供了一个将闭包的引用返回给 JavaScript 上下文以让它处理何时释放引用的示例。

如果我们要放弃cb这里,它将导致每当间隔过去时引发异常。相反,我们将句柄返回给 JS,以便 JS 决定何时取消间隔并释放闭包。

我还想象有一些方法可以#[wasm_bindgen]在公共函数上使用生命周期或宏等功能来避免这个问题,但我很难弄清楚如何做到这一点。

我的问题是,使用.forget从 Rust 传回 JavaScript 的闭包有哪些替代方法,我可以看看使用中每个选项的一些简单示例吗?

0 投票
1 回答
198 浏览

rust - 使用 postMessage 将 JsValue 对象发送到不同的执行上下文

使用web_sys::BroadcastChannel(我假设是否广播频道是相同的结果)我想发布一条将由不同窗口选择的消息,到目前为止我尝试将我的#[wasm_bindgen]带注释的结构转换为JsValue我传递给chan.post_message(&msg.into()).
我在另一端成功接收了一个对象,但它是一个类似于{ptr: 1234567}我假设的 shell 对象,如果从相同的上下文中使用它可以作为底层数据的代理。

有没有办法让 JsValue 成为“真实”对象?与此同时,作为解决方法,我正在发送一个我需要在接收端解析的 JSON 字符串。

0 投票
1 回答
54 浏览

emscripten - Envoy 可以解释 wasm 还是 wasm 对它不透明?

代理 ENVOY 可以解释 wasm 文件吗?就像 wasm 文件对特使是透明的吗?我使用了一个 wasm 过滤器,它使用 envoy 更改 http 标头并对其进行 curl 以捕获 http 标头并显示 wasm 的解释版本而不是二进制文件。这确实意味着特使解释了wasm,只是想确认一下。这些资源太少了。

0 投票
1 回答
608 浏览

rust - 如何将闭包转换为 js_sys::Function?

如何将本地转换closurejs_sys::Funtion

我想做这样的事情:

0 投票
1 回答
706 浏览

javascript - Wasm-bindgen:u8 数组作为输入和输出,生成的 javascript 具有不同的函数签名

我编写了一个函数,它将一个 u8 数组作为输入并输出一个 Uint8Array

然后用wasm-pack.

作为输出,我得到以下打字稿函数定义:

ab() 的两个输入数字是多少?应该如何使用这些功能?

此外,是否有更好的方法可以直接从 Rust 分配给 wasm 内存,以便wasm-packed 函数定义与 rust 函数定义匹配?

0 投票
1 回答
721 浏览

javascript - Rust wasm:如何访问当前实例的 Webassembly.Memory(来自 Rust)?

查看函数签名js_sys::Uint8Array::new_with_byte_offset_and_length

它需要一个buffer引用当前 wasm 实例的内存缓冲区的参数。

如何从 Rust 端访问这样的对象?(被编译成 wasm)

0 投票
0 回答
434 浏览

javascript - Wasm-bindgen:访问 wasm 实例的内存缓冲区(来自 JS)

根据这个 github 评论,我可以通过直接访问 wasm 实例的内存来重新创建从 Rust/wasm 返回的 Uint8ClampedArray 或 Uint8Array:

问题是,由已经实例化一个 wasm 实例生成的 js 文件wasm-bindgen,我想访问这个特定实例的内存,但它似乎没有被导出:

我将如何访问当前 wasm 实例的内存缓冲区?

我试过做:

输出是预期的大小,但每个值都为零。这让我觉得我可能正在尝试从第二个 wasm.memory 实例加载?