WebAssembly

Baseline 2023

Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

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 (en-US)

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 (en-US)

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 (en-US)

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 (en-US)

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 (en-US)

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 (en-US)

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 (en-US)

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() (en-US)

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 (en-US). Esto permite el enlace dinámico de varios módulos.

WebAssembly.Module() (en-US)

El objeto WebAssembly.Module contiene código WebAssembly sin estado que ha sido ya compilado por el navegador y puede ser compartido con workers (en-US) e instanciado varias veces.

WebAssembly.Instance() (en-US)

Un objeto WebAssembly.Instance es una instancia ejecutable y con estado de un Module. Los objetos Instance contienen todas las funciones exportadas de WebAssembly (en-US) que permiten llamar a código WebAssembly desde JavaScript.

WebAssembly.instantiateStreaming() (en-US)

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() (en-US)

Un objeto WebAssembly.Memory es un ArrayBuffer redimensionable que contiene los bytes de memoria accedidos por una Instance.

WebAssembly.Table() (en-US)

Un objeto WebAssembly.Table es un arreglo tipado redimensionable de valores opacos, como referencias a funciones, que son accedidos por una Instance.

WebAssembly.CompileError() (en-US)

Crea un nuevo objeto CompileError de WebAssembly.

WebAssembly.LinkError() (en-US)

Crea un nuevo objeto LinkError de WebAssembly.

WebAssembly.RuntimeError() (en-US)

Crea un nuevo objeto RuntimeError de WebAssembly.

Ejemplos

Especificaciones

Specification
WebAssembly JavaScript Interface
# webassembly-namespace
Unknown specification
Unknown specification
Unknown specification
Unknown specification
WebAssembly Core: Garbage Collection
# garbage-collection①
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification

Compatibilidad con navegadores

webassembly.api

BCD tables only load in the browser

webassembly.BigInt-to-i64-integration

BCD tables only load in the browser

webassembly.bulk-memory-operations

BCD tables only load in the browser

webassembly.exception-handling

BCD tables only load in the browser

webassembly.extended-constant-expressions

BCD tables only load in the browser

webassembly.fixed-width-SIMD

BCD tables only load in the browser

webassembly.garbage-collection

BCD tables only load in the browser

webassembly.multiMemory

BCD tables only load in the browser

webassembly.multi-value

BCD tables only load in the browser

webassembly.mutable-globals

BCD tables only load in the browser

webassembly.non-trapping-float-to-int-conversions

BCD tables only load in the browser

webassembly.reference-types

BCD tables only load in the browser

webassembly.sign-extension-operations

BCD tables only load in the browser

webassembly.tail-calls

BCD tables only load in the browser

webassembly.threads-and-atomics

BCD tables only load in the browser

Ver también