unity - Uso de WebAssembly para llamar a los métodos de la API web
webassembly download (1)
¿Es posible utilizar las API web con WebAssembly? ¿Si es así, cómo? Estoy más interesado en la interfaz del navegador .
Sí, es posible.
Cómo llamar a las API de JavaScript cuando se utiliza una cadena de herramientas de ensamblaje web depende de esa cadena de herramientas específica. Es efectivamente una forma de FFI: desde el código C ++ parece que está llamando a una función externa, pero la cadena de herramientas se une al integrador (aquí, el JavaScript del navegador). Algunos ejemplos:
Las importObject
de importObject
como Emscripten generan automáticamente un importObject
para WebAssembly.instantiate
(junto con los archivos .html
y .js
) / La mayoría de los detalles internos de WebAssembly suelen estar ocultos (los documento a continuación).
Este diseño le permite llamar a cualquier código JavaScript, no solo a las API de JavaScript. Por lo tanto, puede llamar a su propio código JavaScript desde WebAssembly. Las cadenas de herramientas simplemente facilitan el manejo de conjuntos comunes de API web, a veces de manera multiplataforma, por ejemplo, SDL2 hace audio, teclado, mouse, joystick y gráficos.
Detalles internos
La API de JavaScript de WebAssembly le permite pasar un importObject
al constructor WebAssembly.Instantiate
y la función WebAssembly.instantiate
:
new Instance(moduleObject [, importObject])
Promise<{module:WebAssembly.Module, instance:WebAssembly.Instance}>
instantiate(BufferSource bytes [, importObject])
El formato binario de WebAssembly contiene una sección de importación en la que usted (a través de un compilador como LLVM) declara las importaciones que utilizará. Cada uno de estos campos importados se busca en importObject
, y las funciones se pueden invocar a través del código de operación de call
y de call
- call_indirect
WebAssembly.
Por lo tanto, puede llamar a JavaScript arbitrario, que a su vez puede llamar a cualquier API web que desee. En el futuro, WebAssembly podrá obtener capacidades que le permitirán al incrustador exponer las API directamente , en un navegador que incluya, esto podría incluir el DOM, lienzo, eventos, etc.