问题标签 [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.
javascript - Rust wasm:返回两个 `Uint8Array`
当我编写一个返回一个的函数时js_sys::Uint8Array
(在 Rust 中):
然后使用 编译它wasm-pack
,然后从 js/typescript 端以这种方式调用 wasm 函数:
结果 pubKey 正确地转换为Uint8Array
by typescript。
现在,我怎样才能Uint8Array
从 rust 函数返回两个 s 并让它们正确地转换到Uint8Array
typescript 端?
我尝试了以下事情:
- 将两个
Uint8Array
s 放入一个结构并从gen_keypair()
这甚至没有编译,因为js_sys::Uint8Array
没有实现IntoWasmAbi
- 将
*const Uint8Array
s 放入这个结构中,然后从gen_keypair()
这不起作用,因为*const Uint8Array
它只是一个数字。在打字稿方面,它没有实现所有的方法Uint8Array
- 创建一个既实现
IntoWasmAbi
又包含足够信息的类型,以便在内存中找到Uint8Array
' 的内容,从打字稿端重新创建它:
在这里,我不确定如何访问当前 wasm 实例的内存缓冲区(来自 rust或来自 typescript),我需要重新创建原始Uint8Array
s
- 其他的东西,比如返回元组,
Uint8Array
s的数组,但没有任何成功
typescript - 汇总:从外部模块捆绑/嵌入 wasm 代码
使用汇总,我试图捆绑一个打字稿库,该库导入和调用一个包含 wasm 文件的 npm 模块。
只有生成的包不包含任何 wasm 文件内容的痕迹。如何强制它也捆绑 webassembly?
这是我尝试过的关键文件:
我的 package.json 是
最后汇总配置是
(完整的示例 repo 可在https://github.com/nmrshll/ed25519获得)
然后通过以下方式生成捆绑包node node_modules/.bin/rollup -c
它包含一个function _loadWasmModule (sync, src, imports)
但从未被调用的,并且没有嵌入 webassembly 的痕迹(我希望它是一个硬编码的 base64 字符串)。
我怎样才能解决这个问题 ?
编辑:“ed25519-raw”wasm-pack
中包含的 wasm 文件是使用选项生成的--target web
这很重要,因为wasm-pack
使用该选项--target browser
(默认)运行会生成不同的输出(嵌入了 wasm 但编译问题)
rust - 如何为 web_sys::HtmlElement::from 函数设置特征绑定
使用e_text
of typeweb_sys::HtmlDivElement
和e_button
of typeweb_sys::HtmlButtonElement
这个函数构建一个 on_click 回调的闭包。编译运行正常。
下一步是泛化并web_sys::HtmlElement::from
进入buildCbClosure
函数,但还没有找到e
捕捉到这一点的 traitbound。尝试过类似下面的方法,这显然是一个From
错误方向的特征。另一个方向就像来自 的不同子类型的一般向上转换web_sys::HtmlElement
:
给出:
rust - 使用 wasm-pack 构建时在 Rust 和 JavaScript 之间传递字符串
我正在构建一个 Chrome 扩展程序,并选择使用一些 WebAssembly 功能。我使用 wasm-pack 来构建源代码,因为它提供了一个--target web
降低插入 Wasm 函数的复杂性的方法。在 Rust 和 JS 之间传递整数值可以无缝地工作,但我似乎无法将字符串传递给 Rust,反之亦然。
这是我正在使用的内容:
更新:有关我如何导入和实例化 wasm 的更多信息
在使用 wasm-pack 构建并将生成的 pkg 目录导入我的 JS 文件夹之后。我通过 manifest.json 文件将 pkg 目录的内容作为 web_resource 提供给项目。
这是我在 content_script.js 中加载脚本的方式
web-audio-api - 使用优化级别 02 和 03 编译 Wasm 模块以加载到 AudioWorlet?
我正在尝试编译一个带有额外优化的 .wasmmodule.js,以便在 AudioWorklet 中运行。
我使用 .post.js 文件将“导出默认模块”附加到已编译的 Wasm,使用 --post-js 编译标志。这适用于 01 优化,这是工作集设计模式示例中使用的当前编译配置。
我遇到了优化标志 02 和 03 的编译问题,因为我需要使用默认导出加载 Wasm。
如果我评论 --post.js 导出,编译运行良好,优化级别为 02 或 03。但是,我们无法将 Wasm 加载到工作集中,但有以下例外:
例如“加载工作集时出错:SyntaxError: 请求的模块 '../../build/m.wasmmodule.js' 不提供名为 'default 的导出
我尝试了不同的组合,但我无法克服这一点。
如果我可以尝试任何不同的配置,有什么想法吗?
非常感谢
promise - Rust/Webassembly/wasm-bindgen - 从 `js_sys' Promise 中获取值
出于好奇,我正在玩wasm-bindgen
(https://github.com/rustwasm/wasm-bindgen )。
在玩Navigator
(web_sys
板条箱)时,我偶然发现了这种方法:
https://docs.rs/web-sys/0.3.36/web_sys/struct.MediaDevices.html#method.enumerate_devices
它返回一个Result<Promise, JsValue>
..now,我是 Rust 的新手,我的问题是如何获取 的值Promise
?
效果如何Closure::wrap
?如何使用then方法来获取结果?
我想知道是否有人可以这么好心地向我解释如何处理Promise
这是一个返回 a 的示例Promise
:
一切顺利,卢卡
rust - 为什么调用从 JavaScript 编译为 Wasm 的异步 Rust 函数时字符串参数为空?
我正在使用用 wasm-pack 构建的 wasm_bindgen。我有一个向 JS 公开的 Rust 函数:
在 HTML / JavaScript 中,我调用 Rust 函数:
启动应用程序时,单击Send
按钮将调用我的 Rust 函数,但两个String
参数似乎都是空白/丢失。
这是上面函数的控制台跟踪:
我不确定我在这里做错了什么。我应该改变从 JavaScript 调用 Rust 函数的方式吗?
rust - 如何从异步块中更改变量值而不获取它的所有权
我对 rust 很陌生,尝试使用 rust 和 wasm-bindgen 制作一个带有 web 组件的小游戏。我有一个事件监听器,它监听按键,并通过流返回一个方向。然后我想根据方向变量的值每 500 毫秒向画布元素绘制一些东西。
我的问题是我无法direction
从异步块中改变变量,并在 Interval 闭包中使用它。
在 async 块和 Interval 闭包中使用move
关键字可以编译代码,但是方向在间隔函数内永远不会改变。我认为方向变量然后被复制到块/闭包中,因为Direction
枚举实现了Copy
特征。
我已经包含了我的入口点函数的简化版本:
我的问题是;我可以将变量可变地借入异步块吗?我可以在不拥有它的情况下让它活得足够长吗?
提前致谢,
wasm-bindgen - 是否有更有效的方法来遍历 wasm-bindgen 中的 js 对象数组?
这是我的 wasm-bindgen 代码:
这是相同的 JS 代码:
但是 wasm-bindgen 版本慢了 2 倍。我明白为什么 - 因为我使用serde
.
是否有更有效的方法来遍历对象数组wasm-bindgen