Rust web_系统板条箱是如何工作的?

Rust web_系统板条箱是如何工作的?,rust,webassembly,Rust,Webassembly,因此,经过广泛的搜索和阅读,我得到了web\u sys板条箱的用途和功能,但我仍然不知道它是如何实现的 我的印象是,WebAssembly代码不能直接调用JS或访问其对象/方法。我的理解错了吗?如果没有,如何调用WebGL/Canvas/DOM方法 还有一个更实际的问题。与仅使用JS调用相比,使用web\u sys的开销是多少(如果有的话) 我的印象是,WebAssembly代码不能直接调用JS或访问其对象/方法。我的理解错了吗 你的理解是错误的。WebAssembly模块可以从其主机环境导出和

因此,经过广泛的搜索和阅读,我得到了
web\u sys
板条箱的用途和功能,但我仍然不知道它是如何实现的

我的印象是,WebAssembly代码不能直接调用JS或访问其对象/方法。我的理解错了吗?如果没有,如何调用WebGL/Canvas/DOM方法

还有一个更实际的问题。与仅使用JS调用相比,使用
web\u sys
的开销是多少(如果有的话)

我的印象是,WebAssembly代码不能直接调用JS或访问其对象/方法。我的理解错了吗

你的理解是错误的。WebAssembly模块可以从其主机环境导出和导入函数。通过从JS主机环境导入函数,WebAssembly模块能够调用JavaScript函数

但是,这里有一个问题-WebAssembly只有数字类型。为了使用更丰富的类型(字符串、数组、对象)与JavaScript通信,这些值必须编码在线性内存中,这是WebAssembly模块和JavaScript都可以读取和写入的共享内存


将类型编码/解码到线性内存中的过程是使用以下方法自动完成的。您会发现
websys
利用这个包来允许在Rust中操纵DOM对象。

谢谢您的回答。我显然错过了将JS函数导入Wasm的部分。