Как использовать вложенные Vecs с wasm-bindgen? - PullRequest
0 голосов
/ 12 октября 2018

Не похоже, что вложенные Vec s работают с wasm-bindgen.Это правильно?

Моя цель - создать сетку Game of Life в Rust, которую я могу возвращать в виде строк, а не 1D Vec, для которой требуется JavaScript для обработки индексации.Два обходных пути, о которых я подумал:

  1. Реализация своего рода "итератора" в Rust, который представляет собой метод, который возвращает строки одну за другой.
  2. Передайте массив 1D в JavaScript, но напишите в JavaScript обертку, которая обрабатывает индексацию и предоставляет потребителю своего рода итератор.

Я не решаюсь использовать любой из них, потому чтоЯ хочу, чтобы эту библиотеку можно было использовать с помощью JavaScript и нативного Rust, и я не думаю, что она была бы идиоматичной на чистой земле Rust.Любые другие предложения?

1 Ответ

0 голосов
/ 01 ноября 2018

Вы правы, что wasm-bindgen сегодня не поддерживает возвращаемые типы, такие как Vec<Vec<u8>>.

Хорошее практическое правило для WebAssembly заключается в том, что большие куски данных (например, векторы) всегда должны находиться в одном и том же месте, чтобы избежать потери слишком большой производительности.Это означает, что вам может потребоваться изучить интерфейс, в котором объект JS помещает указатель в память WASM, и все его методы работают с индексами строк / столбцов, но изменяют память WASM, чтобы она оставалась источником правды.

Если это не сработает, то лучший способ реализовать это сегодня - это любая из упомянутых вами стратегий, хотя обе из них требуют написания некоторого уровня JS-кода.

...