es exactamente bytecodes. Es un dump del parseo de AST • Interoperable con JS • No solo esta pensado para navegadores ◦ Está pensado para funcionar en cualquier entorno JS como Node, V8, etc ◦ Incluso funciona en otros entornos como JVM o incluso un FPGA • Cada módulo se ejecuta en un sandbox separado y solo puede acceder a recursos externos usando las APIs del navegador (o del entorno de ejecución) • El MVP se completó en Marzo 2017 y ya está en los navegadores más populares y también en Edge
Webassembly es un formato binario ya parseado, por ello, se pueden hacer cosas como streaming del formato binario ▪ Asm.js es un subconjunto de JS ◦ WA no necesita una VM de JS para ser ejecutado • vs PNaCl ◦ PNaCl era propietario de Chrome ◦ Necesitaba una compilación nativa por arquitectura.
basados en LLVM) • Soporte de librerías ◦ Se pueden usar las mismas librerías que en un desarrollo normal en C/C++. ▪ Pthreads, sdl, OpenGL ◦ En entornos de ejecución web se mapean algunas librerías a las que estas disponibles ▪ OpenGL -> WebGL • Soporte nativo en el compilador de Rust como otra arquitectura más ◦ Aunque usando emscripten como “linker” rustc --target=wasm32-unknown-emscripten hello.rs C/C++ Rust
WebAssembly.instantiate(bytes, importObject)) .then(result => result.instance ); • En el futuro se cargará con <script type=’module’> o usando `import` • Por ahora hay que usar la API de JS de WebAssembly