Как использовать вложенные Vecs с wasm-bindgen?
Не похоже, что вложенный Vec
S работа с Wasm-Bindgen. Это верно?
Моя цель - создать сетку Game of Life в Rust, которую я могу вернуть в виде строк, а не 1D Vec
который требует JavaScript для обработки индексации. Два обходных пути, о которых я подумал:
- Реализуйте своего рода "итератор" в Rust, который является методом, который возвращает строки по одной.
- Передайте одномерный массив в JavaScript, но напишите обертку в JavaScript, которая обрабатывает индексацию и предоставляет потребителю своего рода итератор.
Я не решаюсь использовать любой из них, потому что я хочу, чтобы эта библиотека была пригодна для использования с помощью JavaScript и нативного Rust, и я не думаю, что они были бы идиоматичны на чистой земле Rust. Любые другие предложения?
1 ответ
Ты прав, что wasm-bindgen
сегодня не поддерживает возвращаемые типы, такие как Vec<Vec<u8>>
,
Хорошее практическое правило для WebAssembly заключается в том, что большие куски данных (например, векторы) всегда должны находиться в одном и том же месте, чтобы избежать потери слишком высокой производительности. Это означает, что вам может потребоваться изучить интерфейс, в котором объект JS помещает указатель в память WASM, и все его методы работают с индексами строк / столбцов, но изменяют память WASM, чтобы она оставалась источником правды.
Если это не сработает, то лучший способ реализовать это сегодня - это любая из упомянутых вами стратегий, хотя обе они также требуют написания некоторого уровня связующего кода JS.