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

How do I use nested Vecs with wasm-bindgen?

嵌套的 Vec 似乎无法与 wasm-bindgen 一起使用。对吗?

我的目标是在 Rust 中创建一个生命游戏网格,我可以 return 作为行,而不是需要 JavaScript 来处理索引的一维 Vec。我想到的两个解决方法是:

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

我对使用其中任何一个犹豫不决,因为我希望这个库可以被 JavaScript 和原生 Rust 使用,而且我认为在纯 Rust 领域它们都不是非常惯用的。还有其他建议吗?

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

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

如果这不起作用,那么今天实现它的最佳方法就是您提到的任何一种策略,尽管这两种策略都需要编写一定程度的 JS 胶水代码。