WebAssembly

WebAssembly es un nuevo tipo de código que puede ser ejecutado en navegadores modernos — es un lenguaje de bajo nivel, similar al lenguaje ensamblador, con un formato binario compacto que se ejecuta con rendimiento casi nativo y provee un objetivo de compilación para lenguajes como C/C++ y Rust que les permite correr en la web. También está diseñado para correr a la par de JavaScript, permitiendo que ambos trabajen juntos.

En pocas palabras

WebAssembly tiene grandes implicaciones para la plataforma web — provee una forma de correr código escrito en múltiples lenguajes en la web a una velocidad casi nativa, con aplicaciones cliente corriendo en la web que anteriormente no podrían haberlo hecho.

WebAssembly esta diseñado para complementar y correr a la par de JavaScript — usando las APIs WebAssembly de JavaScript, puedes cargar módulos de WebAssembly en una aplicación JavaScript y compartir funcionalidad entre ambos. Esto te permite aprovechar el rendimiento y poder de WebAssembly y la expresividad y flexibilidad de JavaScript en las mismas aplicaciones, incluso si no sabes cómo escribir código WebAssembly.

Y lo mejor es que está siendo desarrollado como un estándar web a través del grupo de trabajo de WebAssembly del W3C y su grupo comunitario con las participación activa de todos los principales fabricantes de navegadores.

Guías

Conceptos de WebAssembly
Empieza leyendo los conceptos de alto nivel detrás de WebAssembly — qué es, por qué es tan útil, cómo encaja en la plataforma web (y más allá), y cómo usarlo.
Compilar un nuevo módulo de C/C++ a WebAssembly
Al escribir código en C/C++, puedes compilarlo a .wasm usando una herramienta como Emscripten. Veamos cómo funciona.
Compilar un módulo existente de C a WebAssembly
Uno de los principales casos de uso para WebAssembly es tomar las librerías existentes del ecosistema de C y permitir que los desarrolladores los usen en la web.
Compilar de Rust a WebAssembly
Si has escrito algo en Rust, ¡puedes compilarlo a WebAssembly! Este tutorial te enseña todo lo que necesitas saber para compilar un proyecto de Rust a wasm y usarlo en una aplicación web existente.
Cargar y ejecutar código WebAssembly
Una vez que tengas un .wasm, este artículo cubre cómo recuperarlo, compilarlo e instanciarlo, combinando la API de WebAssembly de JavaScript con las APIs Fetch o XHR.
Usar la API WebAssembly de JavaScript
Una vez cargado el módulo .wasm, querrás usarlo. En este artículo te mostramos cómo usar WebAssembly mediante la API WebAssembly de JavaScript.
Funciones exportadas de WebAssembly
Las funciones exportadas de WebAssembly son el reflejo en JavaScript de las funciones de WebAssembly que te permiten llamar código WebAssembly desde JavaScript. Este artículo las describe.
Entendiendo el formato de texto WebAssembly
Este artículo explica el formato de texto wasm. Esta es la representación textual de bajo nivel de un módulo .wasm, mostrada en las herramientas de desarrollador del navegador al depurar.
Convertir el formato de texto WebAssembly a wasm
Este artículo provee una guía para convertir un módulo de WebAssembly escrito en su formato de texto a un binario .wasm.

Referencia de la API

WebAssembly
Este objeto sirve como espacio de nombres para toda funcionalidad relacionada a WebAssembly.
WebAssembly.Global()
El objeto WebAssembly.Global representa una instancia variable global, accesible desde JavaScript e importable/exportable a través de una o más instancias de WebAssembly.Module. Esto permite el enlace dinámico de varios módulos.
WebAssembly.Module()
El objeto WebAssembly.Module contiene código WebAssembly sin estado que ha sido ya compilado por el navegador y puede ser compartido con workers e instanciado varias veces.
WebAssembly.Instance()
Un objeto WebAssembly.Instance es una instancia ejecutable y con estado de un Module.  Los objetos Instance contienen todas las funciones exportadas de WebAssembly que permiten llamar a código WebAssembly desde JavaScript.
WebAssembly.instantiateStreaming()
La función WebAssembly.instantiateStreaming() es la principal API para compilar e instanciar código WebAssembly, retornando tanto un Module como su primera Instance.
WebAssembly.Memory()
Un objeto WebAssembly.Memory es un ArrayBuffer redimensionable que contiene los bytes de memoria accedidos por una Instance.
WebAssembly.Table()
Un objeto WebAssembly.Table es un arreglo tipado redimensionable de valores opacos, como referencias a funciones, que son accedidos por una Instance.
WebAssembly.CompileError()
Crea un nuevo objeto CompileError de WebAssembly.
WebAssembly.LinkError()
Crea un nuevo objeto LinkError de WebAssembly.
WebAssembly.RuntimeError()
Crea un nuevo objeto RuntimeError de WebAssembly.

Ejemplos

Especificaciones

Especificación Estado Comentarios
WebAssembly JavaScript Interface Working Draft Borrador inicial de la definición de la API de JavaScript.

Compatibilidad con navegadores

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome para AndroidFirefox para AndroidOpera para AndroidSafari en iOSSamsung InternetNode.js
WebAssemblyChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
CompileErrorChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
GlobalChrome Soporte completo 69Edge Sin soporte NoFirefox Soporte completo 62IE Sin soporte NoOpera Sin soporte NoSafari Soporte completo 13.1WebView Android Soporte completo 69Chrome Android Soporte completo 69Firefox Android Soporte completo 62Opera Android Sin soporte NoSafari iOS Soporte completo 13.4Samsung Internet Android Soporte completo 10.0nodejs Sin soporte No
InstanceChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
LinkErrorChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
MemoryChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
ModuleChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
RuntimeErrorChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
TableChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
compileChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
compileStreamingChrome Soporte completo 61Edge Soporte completo 16Firefox Soporte completo 58IE Sin soporte NoOpera Soporte completo 47Safari Sin soporte NoWebView Android Soporte completo 61Chrome Android Soporte completo 61Firefox Android Soporte completo 58Opera Android Soporte completo 45Safari iOS Sin soporte NoSamsung Internet Android Soporte completo 8.0nodejs Sin soporte No
instantiateChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0
instantiateStreamingChrome Soporte completo 61Edge Soporte completo 16Firefox Soporte completo 58IE Sin soporte NoOpera Soporte completo 47Safari Sin soporte NoWebView Android Soporte completo 61Chrome Android Soporte completo 61Firefox Android Soporte completo 58Opera Android Soporte completo 45Safari iOS Sin soporte NoSamsung Internet Android Soporte completo 8.0nodejs Sin soporte No
validateChrome Soporte completo 57Edge Soporte completo 16Firefox Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
IE Sin soporte NoOpera Soporte completo 44Safari Soporte completo 11WebView Android Soporte completo 57Chrome Android Soporte completo 57Firefox Android Soporte completo 52
Notas
Soporte completo 52
Notas
Notas Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Soporte completo 43Safari iOS Soporte completo 11Samsung Internet Android Soporte completo 7.0nodejs Soporte completo 8.0.0

Leyenda

Soporte completo  
Soporte completo
Sin soporte  
Sin soporte
Ver notas de implementación.
Ver notas de implementación.

Ver también