Есть ли способ создать два модуля WASM, a и b, чтобы a мог вызывать функции из b
Да, вы можете создать экземпляр модуля b
, экспортировав одну из его функций затем создайте экземпляр a
, импортируя ту же функцию, чтобы они могли взаимодействовать. Однако это не так быстро, как одна функция WebAssembly, вызывающая другую, так как вызов происходит через среду хоста.
, а также доступ к отдельной памяти из b
Да, еще раз, это возможно. Линейная память может быть разделена между модулем WebAssemnbly и его хостом, а также может быть разделена между двумя модулями.
это можно сделать без дополнительных затрат и без взаимодействия с JavaScript между ними операции
Как и выше, нет, в настоящее время это не может быть сделано без дополнительных затрат.
Это изменится в будущем по мере расширения и развития спецификации WebAssembly. Одной из проблем, связанных с полезной связью непосредственно между двумя модулями WebAssembly, является понимание API, которое каждый из них предоставляет. WebAssembly является целью компиляции, и различные исходные языки (C ++, Rust) кодируют типы по-разному - это значительно ограничивает межмодульное взаимодействие.
Важным шагом к этому является Типы интерфейса, который кодирует спецификацию API для модуля / функции. Как только это будет реализовано, прямая связь между модулями WebAssembly станет вполне возможной.