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 deWebAssembly.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 unModule
. Los objetosInstance
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 unModule
como su primeraInstance
. WebAssembly.Memory()
-
Un objeto
WebAssembly.Memory
es unArrayBuffer
redimensionable que contiene los bytes de memoria accedidos por unaInstance
. WebAssembly.Table()
-
Un objeto
WebAssembly.Table
es un arreglo tipado redimensionable de valores opacos, como referencias a funciones, que son accedidos por unaInstance
. 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
- WASMSobel
- Consulta nuestro repositorio webassembly-examples para ver otros ejemplos.