web_sys板条箱如何工作?

时间:2019-12-10 05:05:27

标签: rust webassembly

因此,在广泛搜索和阅读之后,我得到了const char *板条箱的用途和用途,但是我仍然不知道它是如何做的。

我有一个印象,WebAssembly代码无法直接调用JS或访问其对象/方法。我的理解错了吗?如果不是,那么strcmp("S", "S") == 0 如何调用WebGL / Canvas / DOM方法?

还有更实际的问题。与仅JS调用相比,使用web_sys的开销是多少?

1 个答案:

答案 0 :(得分:2)

  

我有一个印象,WebAssembly代码无法直接调用JS或访问其对象/方法。我的理解错了吗?

您在这里的理解是错误的。 WebAssembly模块可以从其宿主环境中导出和导入功能。通过从JS主机环境中导入函数,WebAssembly模块可以调用JavaScript函数。

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

使用wasm-bindgen自动将类型编码/解码为线性存储器的过程。您会发现web-sys使用此包是为了允许在Rust中操纵DOM对象。