WebAssembly: стандартизированные интерфейсы
Способ взаимодействия WebAssembly с внешним миром довольно элегантен и безопасен. Добавление интерфейса функции легко, но еще не стандартизировано.
Были ли уже установлены соглашения о вызовах для сред Javascript (в основном для доступа к DOM в браузере или файловой системе в Node)?
1 ответ
Соглашения об управлении узлами DOM или использовании внешних API еще не созданы, но пара предложений / будущих возможностей WebAssembly будет поддерживать это.
Первое - это предложение ссылочных типов, которое позволяет расширить систему типов, добавив новую anyref
тип, который позволяет модулям хранить ссылки на объекты, предоставленные хост-средой, т.е. вы можете передать объект JS в ваш модуль wasm.
Второе - это предложение привязок хоста, которое позволяет модулям WebAssembly создавать, передавать, вызывать и манипулировать объектами JavaScript / DOM. Он добавляет раздел привязок номера хоста, который включает аннотации, описывающие механизм / интерфейс привязки, который должен быть создан.
У Rust уже есть инструмент wasm-bindgen, который очень похож по своему назначению и тесно связан с этим предложением. С помощью wasm-bindgen вы можете легко передавать объекты, такие как строки, через границу wasm / JS. Инструмент добавляет метаданные привязки в модуль wasm и генерирует необходимый код JS-клея.