WebAssembly
Un formato binario portable de instrucciones que ejecutan todos los navegadores principales, mostrado aquí en su formato de texto estándar.
28 pasos en 1 tours, desde lo básico hasta programas completos.
Los tours
- Primera versión
- 2017
- Creado por
- The W3C WebAssembly Working Group
- Tipado
- Una máquina de pila tipada; cada s-expresión es una instrucción
- Los fragmentos siguen
- 3.0
- Extensiones de archivo
- .wat, .wasm
Para qué sirve
WebAssembly es el cuarto lenguaje que los navegadores ejecutan nativamente — después de HTML, CSS y JavaScript — y el único que nadie espera que escribas a mano. Es un destino de compilación: Rust, C, C++, Go, Kotlin y docenas más compilan a su forma binaria compacta, y el motor la corre a velocidad casi nativa dentro del mismo sandbox que contiene a JavaScript. El editor de Figma, Google Earth, Photoshop en la web y la mayoría de las herramientas de video en el navegador lo llevan dentro.
Más allá del navegador se volvió el formato neutral para empaquetar código no confiable: las plataformas serverless de borde, los sistemas de plugins de bases de datos y proxies, y los runtimes de blockchain incrustan motores wasm porque el formato es chico, arranca rápido y viene sellado por defecto — un módulo declara sus imports, y el host decide qué entregarle. WASI extiende esa historia hacia archivos y sockets para que el mismo módulo corra en un servidor sin cambios.
El formato de texto, WAT, es donde los humanos lo encuentran: s-expresiones que mapean una a una sobre el binario. Leerlo enseña cómo funciona de verdad la máquina de abajo — una pila de operandos, locales tipados, memoria lineal direccionada con aritmética — lo que lo hace el raro lenguaje ensamblador que es genuinamente agradable de estudiar, y el que cada ingeniera de compiladores-a-wasm termina leyendo con urgencia.
De dónde viene
WebAssembly se anunció en 2015 por ingenieros de los cuatro fabricantes de navegadores, creciendo desde asm.js de Mozilla — el truco probado de correr C compilado a un subconjunto optimizable de JavaScript — y el Native Client de Google. La meta de diseño era la parte que asm.js no podía entregar: un formato binario compacto con rendimiento casi nativo y predecible, validado y en sandbox, servido idéntico por cada motor.
El MVP llegó a los cuatro navegadores grandes en 2017, uno de los despliegues entre fabricantes más rápidos que la web ha tenido, y el W3C publicó WebAssembly como su cuarta recomendación oficial de lenguaje web en diciembre de 2019. Las entregas siguientes sumaron lo que el WAT escrito a mano luce: valores de retorno múltiples, operaciones de memoria en bloque, tipos de referencia, SIMD.
La Bytecode Alliance — fundada por Mozilla, Fastly, Intel y Red Hat — llevó el formato fuera del navegador con WASI, la interfaz de sistema, y motores de producción como Wasmtime. El modelo de componentes, estandarizado durante los 2020, apunta al sueño restante: bibliotecas neutrales al lenguaje que compongan en cualquier host, con wasm como formato objeto común.
Cómo se siente teclearlo
WAT es paréntesis y nombres de instrucción con punto, en ese orden. Cada operación deletrea su tipo adelante — i32.add, f64.sqrt, i64.extend_i32_s — así que los dedos viven en el punto de la fila base y los dígitos. Los nombres con signo de dólar etiquetan locales, funciones y destinos de salto, y el estilo plegado anida paréntesis de cierre en escaleritas que terminan las líneas con corridas de )))). No hay operadores, ni precedencia, ni azúcar: lo que tecleas es el flujo de instrucciones, lo que lo vuelve un tipeo lento y honesto — los grupos característicos son local.get, i32.const y br_if.
28 pasos en 1 tours, desde lo básico hasta programas completos.
Documentación oficial
- webassembly.org
- La especificación
- Entender el formato de texto (MDN)
- Wasmtime, el runtime independiente
- wasm-tools