问题标签 [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.
reactjs - 如何使用 Rust 在 webview 中加载 WASM 模块?
我正在尝试在webview中托管一个 React 应用程序,它使用已编译的 Rust -> WebAssembly 模块。
我收到此错误:
WASM 模块在以下组件之一中被调用:
然后我使用 webpack 将它全部打包。
然后我在 webview 中加载它:
JavaScript 调试器中的错误导致这行代码:
rust - 是否可以在 WebAssembly 中使用 Rust 进行动态链接?
我正在使用 wasm-bindgen 在 Rust 中为 web 制作图灵完备的 DSL。我希望能够从 Web 下载任意 WASM 代码,然后在我的 DSL 中使用该文件中的函数。dlopen
我想到的是某种具有等价物的动态链接。
我不知道如何实际实现这一点。
通过阅读WebAssembly 文档,我得到的印象是它确实应该是可能的,但我没有足够的知识来理解本文档中的过程细节。
wasm-bindgen 参考中有一章详细说明了如何从 WebAssembly 模块内部实例化 WebAssembly 模块!,但这似乎是通过 JavaScript 实现的,这似乎不是最理想的,而不是 WebAssembly 文档所描述的。
在 js-sys 中,可以从任意字符串创建 JavaScript 函数,但这本质上是Function(/* some arbitrary string */)
从 JavaScript 端调用的,这似乎不是最理想的,而不是 WebAssembly 文档所描述的。
是否有可能或有其他更合适的方式来实现我的目标?
rust - Cloudflare Workers 中的 WebAssembly 实例化内存不足
我正在使用 Rust 构建一个 WebAssembly 模块,以在 Cloudflare Workers 中使用,通过wasm-bindgen
. 该模块总体上非常基础;它有一个名为 的函数process
,它将两个二进制文件(由两个 Uint8BitArray 表示)和一个 json_value(由 解释serde
)作为输入,并产生 None 或字符串,通常是这样的。
实例化 WebAssembly 模块的胶水代码与wasm-bindgen --no-modules
命令几乎相同,我只将第 93 行的初始化条件更改为true
:
我使用cloudworker试用了整个脚本,它运行没有问题。然后,我使用Preview Service API尝试了相同的脚本,并且它在几次尝试中运行良好,直到它开始抛出错误:
这发生在实例化时,无论发送的请求如何(初始化后发生的事情不是 .
我一直在尝试精简我的 Webassembly 脚本,但即使是 hello-world 类型的函数也被拒绝了。我不知道如何调试,这与胶水代码,锈代码或Cloudflare的预览服务有关吗?
webpack - Rust/Wasm:找不到模块:错误:无法解析“env”
我正在尝试将这个箱子的包装器移植到 wasm 中。我目前的工具链是:
- wasm包
- 网页包
- wasm-bindgen
关于构建系统的更多信息:
在我的 rust crate(这是一个--lib
crate)中,我只调用wasm-pack build --target browser
. 这将创建一个pkg
包含 wasm blob 和相关 js 文件的文件夹。这里没有编译器的抱怨。
然后,在里面pkg
,我跑npm link
(只跑一次)。
然后,cargo generate --git https://github.com/rustwasm/wasm-pack-template
创建所需的 Web 应用样板。在此命令生成的文件夹中,我运行npm link schnorrkel-js
以使其可见。npm run start
运行 webpack 开发服务器。
绑定简单计算函数和警报等初始测试工作正常。
当我开始使用提到的板条箱(示例)中的一些(不是任何)功能时,一切都会中断。不幸的是,我收到的错误消息信息量不大,根本没有帮助:
这是什么原因?我有一个强烈的猜测,一些底层功能不能移植到 wasm,但究竟是哪一个,为什么,以及错误消息试图说什么?
笔记:
我正在使用最新的 rust nightly 版本 (
rustc 1.34.0-nightly (d17318011 2019-02-07)
)其余的设置步骤直接取自Rust 和 Webassembly 书。
货运.toml
示例代码:
webassembly - 如何倾倒wasm?
我发现您可以在 chrome 中以开发人员模式查看 wasm 模块,并且我还在这里找到了一个 chromium 标志,但是我想使用不同的浏览器来转储 wasm 文件。我怎么做?
unit-testing - 如何比较 Rust 代码中两个 JsValue 的值?
在 JavaScript 中,我可以这样做:
在编译为 Wasm 的 Rust 中,我尝试了类似的方法:
它引发了一些wasm-pack test --chrome
关于 no partialeq
forJsString
的错误 - 结果是JSON::stringify
:
如果我尝试转换为字符串并以其他方式进行比较(例如直接使用JsString
方法),我总是会遇到相同的编译错误。
如果我尝试直接比较这个数组,我在 JavaScript 中有类似的行为:
在Cargo.toml
我有:
我该如何进行这种比较?
编辑。
我想出了这样的东西来通过这个测试:
javascript - 使用 Blob 中的 Wasm 模块热加载 Web Audio worklet 处理器时出现 DOMException?
我正在尝试使用 Emscripten 从 C++ 代码转译的 Wasm 模块导入加载动态 Web 音频工作集。
我想在内存中操作工作集代码,使用 Blob 创建对象,将它们作为模块注入音频工作集,并热交换它们。
我遵循了 web-audio-samples 解决方案中建议的设计模式来实现将作为 Wasm 模块导入工作集的工作集。当处理器代码在文件中时,这似乎工作得很好。
在没有外部 Wasm 模块导入的情况下从内存中热加载和交换工作集似乎也很有效。
这就是我为 Blob 创建代码的方式。为了说明,我使用了 simple-kernel.wasmmodule.js,它使用与 web-audio-samples 中的 Wasm 设计模式示例相同的 Emscripten 配置进行编译。
这就是我如何使用带有 Blob 的代码来创建一个对象并将其加载到工作集中。
我希望这可以像没有 Wasm 导入的处理器一样工作,或者当我从文件加载它们时。如果在 worklet 构造函数和处理方法中注释模块导入和模块代码,它可以工作。
但是,使用 Wasm 导入热加载工作集似乎不起作用......当我尝试这样做时,我得到“加载工作集时出错:DOMException”并且没有其他线索。
我怀疑这可能有点幼稚,并且可能需要更复杂的操作,例如动态导入......
我创建了一个 web-audio-samples 解决方案的分支,我在其中添加了一个小示例项目 ( wasm-hot-loading ),它创建了说明问题的条件。
任何人都可以帮助阐明问题可能是什么以及这是否可行?
谢谢
FØ
typescript - Rust WebAssembly 自定义元素内存释放错误
我的第一个 Rust 生成的 WASM 产生了以下错误,我不知道如何进行调试。
上下文:最新的 Chrome,从 TypeScript 自定义元素调用的 Rust wasm-bindgen 代码,在影子 DOM 中的画布上操作。渲染到画布的数据来自 HTML5 AudioBuffer。所有 rust 变量都是局部作用域的。
如果文档中只出现一个实例,则 Web 组件可以完美运行,但如果我进一步实例,则会像上面那样转储堆栈跟踪。代码运行没有任何其他问题。
我知道 Chrome 中存在突出的内存错误——它们看起来像这样吗,或者有经验的 rust/wasm 开发人员可以告诉我这是否不寻常?
rust 代码很小,只是将 AudioBuffer 的两个通道渲染到提供的 HTMLCanvasElement:
我试过注释掉功能,如果代码没有触及画布但做了上述,我得到了错误。进行以下更改会导致简单的“内存不足”错误。音频文件为 1,200 k。
编辑:后一个out of memory
错误,对于上面的正确代码,真的让我失望,但它实际上是一个Chrome 错误。
rust - 如何处理来自 Result 的 Rust 错误作为返回值,而不是在 JavaScript 中抛出异常?
我想像这样编写 JavaScript:
看来,如果我使用标准Result
类型,那么我需要使用try
/ catch
:
产生错误的 Rust 代码:
这是基于rust-parcel-template中的示例。带有 Rust + WASM + JS 的完整 web 应用程序以及上面的小示例位于GitHub 上。
rust - 什么是元组变体?(了解编译器错误消息)
使用wasm_bindgen
with serde
,我正在尝试JsValue
使用惯用的 rust 返回一个复杂结构。我创建了一个孤立的示例来说明我看到的错误。
结构声明:
函数定义:
我得到这个编译错误:
您可以查看基于rust-parcel-template的完整示例
要重现错误,请从 repo 的根目录运行npm run start
或cd crate && cargo build