问题标签 [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 回答
652 浏览

webpack - wasm-bindgen、asm.js 和 Emcripten 有什么区别?

我正在努力让 webpack 使用一组使用 wasm-bindgen 编译的WebAssembly 文件。

即使这可能只是 webpack 的一个问题,它也让我意识到我没有完全理解这些古怪的 WebAssembly 工具之间的区别。

0 投票
1 回答
306 浏览

async-await - 调用 FutureExt::boxed() 时缺少 Send 的实现

我正在用 WASM 试验期货,使用wasm-bindgen-futures; rust-webpack-template完整的工作代码和问题代码可用。

我的实验是从 JavaScript调用async fn run()由 a 包裹的 a 。fn run_js() -> js_sys::Promise以下是有效的:

下一步是添加一个 sleep 函数并从以下位置调用它run()

crate::compat转换 Future 0.3 -> Future 0.1 -> Promise,然后返回。为了完整起见,这里是promise_to_future

添加这个,我在这里得到一个编译错误:

(添加和删减了更多源代码上下文;完整版本如下)

我无法弄清楚错误是什么;这里的东西不是Send,但这就是我所理解的。

这在原则上不应该是可能的吗?或者我应该如何编写我的睡眠功能才能正常工作?


完整编译器输出:

0 投票
0 回答
535 浏览

typescript - 有没有办法将 wasm-bindgen 的 JsValue 的 TypeScript 类型注释为更有意义的东西?

我有一个 Rust / Wasm 函数,我正在为使用 wasm_bindgen 生成 TypeScript 绑定。的输出类型JsValueany。有没有办法在不编辑自动生成的情况下手动将类型注释为更有意义的东西*.d.ts

0 投票
1 回答
215 浏览

rust - 使用 wasm_bindgen 公开原生 Rust 类

我正在通过本教程学习如何使用 Rust 定位 WASM 。我希望能够将我的域代码与将其公开给 WASM 的代码分开。这样,我可以在非 WASM 应用程序中重用域代码,而不会大惊小怪。我找不到任何这样做的例子,我不知道它是否受支持。

现在,我正在做的是用另一个结构包装我的 vanilla Rust 结构,该结构具有围绕域类的公共方法的包装器。我几乎可以肯定这不是正确的方法,但它现在有效。

我希望能够绑定CellValue到 WASM。

这就是我World向 WASM 公开的方式——我将它包装起来GOL并实现方法,GOL以便 WASM 可以与World.

对于CellValue,我无法模仿我采用的方法,GOL因为我需要能够引用 . 持有的每个单元格内的数据World

就像我说的,我跳过这些障碍的全部原因是为了避免在我的域代码中添加#[wasm_bindgen]. 甚至有可能获得这种绑定吗?

0 投票
1 回答
325 浏览

rust - 将 JS 中实例化的 Rust 结构存储在 Wasm 端的 Rust 向量中

如何将 JS 实例化的对象存储在 Rust 的结构中并对其进行计算?

我根据教程创建了一个示例。

生锈部分:

body添加到世界之后,它立即失去了它的引用。

Console.log 结果:

是否可以将引用存储在 JS 中?我的用例:我在 JS 端处理所有交互等,在 wasm 端只处理繁重的计算。

0 投票
1 回答
114 浏览

rust - 替代退货选项]>> 从 Rust fn 到 Wasm

我正在尝试将std::boxed::Box<[std::boxed::Box<[wasm_bindgen::JsValue]>]> 我的 Rust 代码返回到 Wasm,但收到此错误。

我了解该特征未实现,但是有解决方法吗?

原始错误

#[wasm_bindgen]

| ^^^^^^^^^^^^^^^^ 该特征wasm_bindgen::convert::traits::OptionIntoWasmAbi未实现std::boxed::Box<[std::boxed::Box<[wasm_bindgen::JsValue]>]>

0 投票
1 回答
389 浏览

rust - type mismatch resolving future_to_promise

I'm trying to do below:

  1. Receive function via argument
  2. Execute the function that returns Promise
  3. Wait Promise to be resolved
  4. Execute something
  5. return Promise

At first, I want to call js_sys::Promise#then. However, there is no way to return something from the closure passed to js_sys::Promise#then.

So, I'm trying to convert js_sys::Promise to wasm_bindgen_futures::JsFuture, call futures::future::TryFutureExt#and_then and convert wasm_bindgen_futures::JsFuture to js_sys::Promise using future_to_promise.

Now, I get compile error shown below:

found type std::result::Result<wasm_bindgen::JsValue, _>

I cannot understand the reason these error was occered. get_replaced returns Result<JsString, JsValue>. Why error meesage says that found type std::result::Result<wasm_bindgen::JsValue, _>????

Please tell me how to resolve this error or anthoer solution.


Cargo.toml

full source code is below:
https://github.com/yumetodo/markdown_img_url_editor/tree/refaactor/by_rust/markdown_img_url_editor_rust

My build env is below:

OS: Windows 10 1809, Ubuntu 18.04

0 投票
2 回答
1814 浏览

asynchronous - 将 Rust 编译为 wasm(Web 程序集)时,我如何才能睡 10 毫秒?

我的 rust 程序正在管理 2d html 画布上下文的内存,我试图达到 ~60fps。我可以很容易地计算出每一帧之间的增量,结果大约是 5 毫秒。

我不清楚如何让我的 Rust webassembly 程序在剩余的 11 毫秒内休眠。一种选择是让 JavaScript 在每个程序上调用 RustrequestAnimationFrame并将其用作驱动程序,但我很想尽可能将其全部保留在 Rust 中。

setTimeout(renderNext, 11)在编译到 wasm 目标时,我正在有效地寻找与 JavaScript 等效的 Rust 。

0 投票
1 回答
146 浏览

javascript - 有没有办法重新 webapck npm 包,使用 webpacked 的 wasm 并将其用于 vscode 插件开发?

首先,我创建了使用 wasm 的 npm 包,该包使用 wasm-pack 从 rust-lang 转换而来。

https://www.npmjs.com/package/markdown_img_url_editor

node_modules/markdown_img_url_editor

markdown_img_url_editor_files

现在,我想重新 webpack 包并使用它。

https://github.com/yumetodo/vscode-google-photos-uploader/tree/feat/follow_markdown_img_url_editor_break_change

然而,目前至少存在两个问题。

  1. .wasm未复制到 webpack dest 目录

  2. 手动复制.wasm文件后, 在调试执行时,发生错误。
    在此处输入图像描述
    TypeError: Cannot read property 'call' of undefined at __webpack_require__

我应该如何解决这些问题?

webpack.config.js

0 投票
1 回答
1811 浏览

rust - 当目标拱门是 WASM 时默认启用 Cargo 功能?

我的板条箱的 Cargo.toml 的一部分:

当 crate 在另一个项目中使用并且明确选择了“wasm”功能时,这是有效的。

我只想在目标拱门是 WASM 时自动启用此功能。我试着添加这个:

当我为 WASM 以外的目标进行编译时,默认包含“wasm”,如何仅当目标为 WASM 时才将“wasm”设为默认?