Как использовать вложенные Vecs с wasm-bindgen?

Не похоже, что вложенный VecS работа с Wasm-Bindgen. Это верно?

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

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

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

1 ответ

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

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

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

Другие вопросы по тегам