如何将嵌套的Vecs与wasm-bindgen一起使用?

时间:2018-10-12 02:54:08

标签: rust webassembly wasm-bindgen

似乎Vec嵌套不能与wasm-bindgen一起使用。正确吗?

我的目标是在Rust中创建一个Game of Life网格,我可以将其作为行返回,而不是需要JavaScript处理索引的一维Vec。我想到的两个解决方法是:

  1. 在Rust中实现一种自定义的“迭代器”,这是一种一种可以逐行返回行的方法。
  2. 将一维数组传递给JavaScript,但用JavaScript写一个包装程序,该包装程序处理索引并向使用者公开某种迭代器。

我犹豫使用这两种方法,因为我希望该库可被JavaScript和本机Rust使用,并且我认为在纯Rust领域,这两种方法都不是非常习惯的。还有其他建议吗?

1 个答案:

答案 0 :(得分:7)

您正确的认为,今天的wasm-bindgen不支持像Vec<Vec<u8>>这样的返回类型。

WebAssembly的一个好的经验法则是,大块数据(如矢量)应始终位于同一位置,以避免失去过多的性能。这意味着您可能想探索一个接口,其中JS对象将指针包装到WASM内存中,并且其所有方法都可与行/列索引一起使用,但修改WASM内存以将其保留为事实的来源。

如果仍然无法解决问题,那么今天实现此目的的最佳方法就是您提到的任何一种策略,尽管这两种策略也都需要编写一定程度的JS胶水代码。