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

and*_*man 2 rust webassembly wasm-bindgen

嵌套的Vecs 似乎不适用于wasm-bindgen.那是对的吗?

我的目标是在Rust中使用生命游戏网格,我可以将其作为行返回,而不是Vec需要JavaScript处理索引的1D .我想到的两个解决方法是:

  1. 在Rust中实现一种自定义"迭代器",这是一种逐行返回行的方法.
  2. 将一维数组交给JavaScript但在JavaScript中编写一个包装器来处理索引并向消费者公开某种迭代器.

我不愿意使用其中任何一个,因为我希望这个库可以被JavaScript和本机Rust使用,而且我认为这两者在纯Rust的土地上都不会非常惯用.还有其他建议吗?

小智 7

你是对的,wasm-bindgen今天不支持返回类型Vec<Vec<u8>>.

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

如果这不成功,那么今天实现这个的最好方法是你提到的策略中的任何一个,尽管这两个都需要编写一些级别的JS粘合代码.