Articulo de referencia

WebAssembly

{{Cite web|title=WebAssembly/design/Semantics.md|url=https://github.com/WebAssembly/design/blob/376bcc4b9cba79280d79be023d71e30d0b00ba47/Semantics.md|access-date=2021-02-23|webs...

WebAssembly ( Wasm ) define un formato de código binario portátil y un formato de texto correspondiente para programas ejecutables [ 2 ] e interfaces de software para facilitar la comunicación entre dichos programas y su entorno anfitrión. [ 3 ] [ 4 ] [ 5 ] [ 6 ]

El objetivo principal de WebAssembly es facilitar aplicaciones de alto rendimiento en páginas web , pero también está diseñado para ser utilizable en entornos que no son web. [ 7 ] Es un estándar abierto [ 8 ] [ 9 ] destinado a admitir cualquier lenguaje en cualquier sistema operativo, [ 10 ] y en la práctica muchos de los lenguajes más populares ya tienen al menos algún nivel de soporte.

Anunciado en 2015  ( 2015 ) y lanzado por primera vez en marzo de 2017 ( 2017-03 ) , WebAssembly se convirtió en una recomendación del Consorcio World Wide Web (W3C) el 5 de diciembre de 2019 [ 11 ] [ 12 ] [ 13 ] y recibió el Premio de Software de Lenguajes de Programación de la Asociación para la Maquinaria de Computación (ACM) SIGPLAN en 2021. [ 14 ] El W3C mantiene el estándar con contribuciones de Mozilla , Microsoft , Google , Apple , Fastly , Intel y Red Hat . [ 15 ] [ 16 ]  

Historia

El nombre "WebAssembly" pretende sugerir la integración de la programación en lenguaje ensamblador en la World Wide Web , donde se ejecutará del lado del cliente , en el ordenador del usuario a través de su navegador web . Para lograrlo, WebAssembly debe ser mucho más independiente del hardware que un verdadero lenguaje ensamblador.

WebAssembly se anunció por primera vez en 2015, [ 17 ] y la primera demostración fue ejecutar Angry Bots de Unity en Firefox , [ 18 ] Google Chrome , [ 19 ] y Microsoft Edge [Legacy] . [ 20 ] Las tecnologías precursoras fueron asm.js de Mozilla y Google Native Client , [ 21 ] [ 22 ] y la implementación inicial se basó en el conjunto de características de asm.js. [ 23 ] [ nota 1 ]

En marzo de 2017, se declaró finalizado el diseño del producto mínimo viable (MVP) y concluyó la fase de vista previa. [ 25 ] A finales de septiembre de 2017, se lanzó Safari 11 con soporte. En febrero de 2018, el Grupo de Trabajo de WebAssembly publicó tres borradores de trabajo públicos para la Especificación Principal, la Interfaz JavaScript y la API Web. [ 26 ] [ 27 ] [ 28 ] [ 29 ]

El MVP se centró en lenguajes de bajo nivel como C y C++ , con la intención de agregar características útiles para lenguajes de alto nivel en una versión futura. [ 30 ]

Actualmente, el multihilo es un borrador, pero Chrome lo admite desde la versión 75 en junio de 2019, Firefox versión 79 y Safari versión 14.1 [ 31 ] [ 32 ] [ 33 ].

La especificación WebAssembly 2.0 se finalizó en 2022 y se convirtió en un estándar del W3C en diciembre de 2024. Añade muchas instrucciones relacionadas con instrucciones únicas de datos múltiples (SIMD) y un nuevo tipo de datos v128, con la capacidad de que las funciones devuelvan múltiples valores, instrucciones de inicialización/copia de memoria masiva y tipos de referencia, que son punteros opacos a objetos fuera de la memoria lineal. [ 34 ]

WebAssembly 3.0 se lanzó en septiembre de 2025. Las nuevas características incluyen un espacio de direcciones de 64 bits , múltiples espacios de direcciones, manejo de excepciones y tipos de estructuras y matrices con recolección de basura. [ 35 ] La compatibilidad con la recolección de basura permite una compilación más eficiente para lenguajes de alto nivel, [ 36 ] [ 37 ] pero WasmGC de WebAssembly 3.0 carece de las capacidades necesarias para el entorno de ejecución de .NET . [ 38 ]

Implementaciones

Aunque WebAssembly se diseñó inicialmente para permitir una velocidad de ejecución de código casi nativa en el navegador web, se ha considerado valioso fuera de este, en contextos más generalizados. [ 39 ] [ 40 ] Un entorno de ejecución de WebAssembly es una máquina virtual de pila de bajo nivel , similar a JVM o Flash VM ; se puede integrar en cualquier aplicación host, y por lo tanto se han creado entornos de ejecución de WebAssembly independientes, incluidos Wasmtime  , WebAssembly Micro Runtime  , Wasmer  , WasmEdge  y wazero  . [ 9 ] [ 10 ] Los entornos de ejecución de WebAssembly se integran en servidores de aplicaciones para alojar aplicaciones WebAssembly del lado del servidor y en otras aplicaciones para admitir arquitecturas de extensión de software basadas en complementos , por ejemplo, WebAssembly para Proxies (Proxy-Wasm) que especifica una interfaz binaria de aplicación (ABI) basada en WebAssembly para extender servidores proxy . [ 41 ] [ 42 ]

navegadores web

En noviembre de 2017, Mozilla declaró compatibilidad "en todos los navegadores principales" [ 43 ] después de que WebAssembly se habilitara por defecto en Edge [Legacy] 16 [ 44 ]. Esta compatibilidad también incluye navegadores web móviles para iOS y Android. A partir de marzo de 2024 ,El 99 % de los navegadores web rastreados admiten WebAssembly (versión 1.0), [ 45 ] más que para su predecesor asm.js. [ 46 ] Para algunas extensiones, del borrador del estándar 2.0, la compatibilidad puede ser menor, pero aún así más del 90 % de los navegadores web pueden ya admitir, por ejemplo , la extensión de tipos de referencia. [ 47 ]

Entornos de ejecución que no son navegadores

Los entornos de ejecución de WebAssembly que no son navegadores incluyen Wasmer, [ 10 ] Wasmtime, [ 48 ] WAMR, WAVM, wasm3 y otros. [ 49 ] Estos sistemas ejecutan módulos Wasm precompilados y a menudo proporcionan API adicionales para integrar WebAssembly en diferentes entornos. Los casos de uso de wasm fuera del navegador incluyen interfaces de complementos y virtualización ligera. [ 50 ]

Compiladores

Las implementaciones de WebAssembly suelen utilizar la compilación anticipada (AOT) o la compilación justo a tiempo (JIT), aunque algunas también pueden usar un intérprete . Si bien las primeras implementaciones aparecieron en navegadores web, actualmente existen muchas implementaciones para uso general que no se ejecutan en navegadores.

cadenas de herramientas de compilación

Debido a que los ejecutables de WebAssembly están precompilados, una variedad de lenguajes de programación pueden usar Wasm. [ 51 ] La compilación se realiza mediante la salida directa a Wasm o a través de máquinas virtuales intermedias implementadas en Wasm.

Entre las cadenas de herramientas más destacadas se incluyen:

  • Emscripten , que compila C y C++ a Wasm usando Clang como interfaz, Binaryen como optimizador, y también puede tener como destino cualquier lenguaje compatible con LLVM. [ 25 ]
  • Clang independiente (versión 8 y posteriores), que admite la compilación directa a Wasm. [ 52 ]
  • Flujos de trabajo basados ​​en LLVM para lenguajes como Rust y AssemblyScript. [ 53 ]

Soporte de idiomas

A partir de 2021, alrededor de 40 lenguajes de programación admiten WebAssembly como destino de compilación. [ 53 ] Algunos ejemplos incluyen:

Límites

Los navegadores web impiden que el código WebAssembly manipule directamente el Modelo de Objetos del Documento . El código Wasm debe recurrir a JavaScript para ello. [ nota 2 ]

En una encuesta realizada en octubre de 2023 a desarrolladores, menos de la mitad de los 303 participantes se mostraron satisfechos con el estado de WebAssembly. Una gran mayoría mencionó la necesidad de mejoras en cuatro áreas: WASI  , soporte para la depuración, integración con JavaScript y las API del navegador, y herramientas de compilación. [ 74 ]

Para asignaciones intensivas de memoria en WebAssembly, existen "graves limitaciones que hacen que muchas aplicaciones sean inviables para implementarse de manera confiable en navegadores móviles [...] Actualmente, asignar más de ~300 MB de memoria no es confiable en Chrome en Android sin recurrir a soluciones alternativas específicas de Chrome, ni en Safari en iOS". [ 75 ]

Todos los navegadores principales permiten WebAssembly si no se especifica, o si se usa Content-Security-Policyel valor , pero se comportan de manera diferente en caso contrario; [ 76 ] Chrome requiere , [ 77 ] [ 78 ] aunque un hilo de trabajo puede ser una solución alternativa. [ 78 ]unsafe-evalunsafe-eval

Consideraciones de seguridad

En junio de 2018, un investigador de seguridad presentó la posibilidad de usar WebAssembly para eludir las medidas de mitigación del navegador para las vulnerabilidades de seguridad Spectre y Meltdown una vez que se agregara soporte para subprocesos con memoria compartida. Debido a esta preocupación, los desarrolladores de WebAssembly suspendieron la función. [ 79 ] [ 80 ] Sin embargo, para explorar estas futuras extensiones del lenguaje, Google Chrome agregó soporte experimental para la propuesta de subprocesos de WebAssembly en octubre de 2018. [ 81 ]

WebAssembly ha sido criticado por permitir una mayor facilidad para ocultar la evidencia a los creadores de malware , estafadores y atacantes de phishing ; WebAssembly está presente en la máquina del usuario solo en su forma compilada, lo que "[hace que el malware] sea difícil de detectar". [ 82 ] La velocidad y la facilidad para ocultarse en WebAssembly han llevado a su uso en la minería de criptomonedas oculta dentro del dispositivo del visitante del sitio web. [ 82 ] [ 83 ] Coinhive, un servicio ahora desaparecido que facilitaba la minería de criptomonedas en los navegadores de los visitantes de sitios web, afirma que su "minero usa WebAssembly y funciona con aproximadamente el 65% del rendimiento de un minero nativo". Un estudio de junio de 2019 de la Universidad Técnica de Braunschweig analizó el uso de WebAssembly en el millón de sitios web más visitados por Alexa y encontró que el uso predominante era para la minería de criptomonedas maliciosa, y que el malware representaba más de la mitad de los sitios web que usaban WebAssembly estudiados. [ 84 ] [ 85 ] Un estudio de abril de 2021 de la Universidad de Stuttgart encontró que desde entonces la minería de criptomonedas se ha marginado, cayendo a menos del 1% de todos los módulos WebAssembly recopilados de una amplia gama de fuentes, incluyendo también el millón de sitios web más visitados por Alexa. [ 86 ]

Como WebAssembly solo admite flujo de control estructurado , es susceptible a técnicas de verificación de seguridad, incluida la ejecución simbólica . [ 87 ]

Actuación

Inicialmente, la velocidad de ejecución de un programa Wasm se comparó con la de un programa nativo comparable, obteniendo un rendimiento de alrededor del 91 % (o aproximadamente un 10 % más lento), sin incluir el tiempo de carga/instanciación; sin embargo, diversas pruebas de rendimiento posteriores indican una amplia gama de características de rendimiento, desde el 33 % hasta el 200 % de la velocidad de ejecución del código nativo, dependiendo de la tarea.

En 2019, un grupo de investigadores de la Universidad de Massachusetts Amherst presentó un análisis exhaustivo del rendimiento de WebAssembly en comparación con el código nativo. [ 88 ] Este estudio utilizó el conjunto de pruebas comparativas SPEC CPU y un sistema llamado "Browsix-Wasm" para ejecutar aplicaciones Unix sin modificar en el navegador, lo que permitió probar aplicaciones del mundo real y encontrar una brecha de rendimiento significativa entre la ejecución de Wasm y la ejecución nativa; en particular, los programas Wasm mostraron una ralentización promedio del 45 % en Firefox y del 55 % en Chrome en las pruebas comparativas del mundo real; las ralentizaciones máximas resultaron en que un programa Wasm tardara 2,08 veces más en ejecutarse en Firefox y 2,5 veces más en ejecutarse en Chrome. El artículo identificó varias razones para esta diferencia de rendimiento, incluidas las optimizaciones faltantes, problemas de generación de código en los compiladores de WebAssembly y las limitaciones inherentes de la plataforma WebAssembly.

Un estudio de 2021 sugirió que WebAssembly es mucho más rápido que JavaScript en ciertos casos, como al ejecutar una función compleja en un archivo pequeño ( por ejemplo , procesar un archivo gráfico); sin embargo, en ese momento, el intérprete de JavaScript tenía algunas optimizaciones disponibles que las implementaciones de WebAssembly no tenían ( por ejemplo , compilación Just-in-Time ). [ 89 ]

En 2022, los investigadores determinaron que un programa Wasm se ejecuta aproximadamente al 120 % (o un 20 % más rápido) que un programa JavaScript comparable. [ 90 ] Estos hallazgos coinciden con la experiencia de una empresa emergente llamada "Zaplib", cuyos fundadores resumieron en un blog que cerraba debido a la falta de rendimiento en WebAssembly. [ 91 ] Su objetivo había sido aumentar significativamente el rendimiento de las aplicaciones web existentes mediante su portabilidad incremental a Rust /Wasm; sin embargo, la portabilidad del simulador de un cliente desde JavaScript solo produjo una mejora del 5 % en el rendimiento. De manera similar, con respecto a Figma , declararon lo siguiente:

Tras un análisis más detallado, parece que el uso de WebAssembly por parte de Figma se debe más a circunstancias fortuitas —el deseo de desarrollar en C++ para proteger su aplicación nativa— que a necesidades críticas de rendimiento. Los archivos de Figma se procesan en C++/WebAssembly, lo que probablemente supone una gran mejora en la velocidad, pero la mayor parte de la eficacia de Figma se debe a su motor de renderizado WebGL .

En 2023, un estudio sobre el rendimiento de Wasm en tareas criptográficas indicó que "al usar el entorno de ejecución más rápido, WebAssembly era solo aproximadamente 2,32 veces más lento (mediana) que el código nativo con optimizaciones específicas de la arquitectura". Este resultado excluyó dos pruebas en las que el código nativo se benefició de instrucciones especiales implementadas directamente en la CPU de la plataforma de destino; para esas pruebas en particular, los programas Wasm fueron "80 veces más lentos que el código nativo". [ 92 ]

Las pruebas de rendimiento han revelado otros puntos débiles de WebAssembly, como un rendimiento deficiente debido a la falta de acceso directo al DOM, [ nota 3 ] un problema que se está abordando. [ 94 ]

WASI

La interfaz del sistema WebAssembly (WASI) es una interfaz simple ( interfaz binaria de aplicación (ABI) e interfaz de programación de aplicaciones (API)) diseñada por Mozilla , que pretende ser portable a cualquier plataforma. [ 95 ] Proporciona características similares a la interfaz del sistema operativo portátil ( POSIX ), como entrada/salida (E/S) de archivos restringida por seguridad basada en capacidades . [ 96 ] [ 97 ] Existen ABI/API adicionales propuestas. [ 98 ] [ 99 ]

WASI está influenciado por CloudABI y Capsicum . [ 100 ]

Solomon Hykes , cofundador de Docker , escribió en 2019: «Si WASM+WASI hubiera existido en 2008, no habríamos necesitado crear Docker. Así de importante es. WebAssembly en el servidor es el futuro de la informática». [ 101 ]

WASI 0.1 proporciona algunas API similares a POSIX, como E/S de archivos, lectura de variables de entorno y generación de números aleatorios, pero tiene muy poco soporte para redes. WASI 0.2 se rediseñó basándose en el modelo de componentes WebAssembly. [ 102 ] [ 103 ] WASI 0.3 agregará soporte para funciones asíncronas; el host traduce entre llamadas a funciones bloqueantes y asíncronas, por lo que una función exportada que se bloquea puede llamarse como una función asíncrona, y viceversa. [ 104 ] [ 105 ]

A partir de la versión 0.2, WASI se define en términos del modelo de componentes. Las interfaces en el modelo de componentes se especifican en un IDL llamado WIT (WebAssembly Interface Types). Si bien wasm básico solo admite números enteros y de punto flotante, las interfaces en WIT pueden expresar tipos como cadenas, listas y tipos de registro y variante definidos por el usuario, y son independientes del lenguaje. [ 106 ] Los componentes no pueden acceder a la memoria de otros, por lo que interactúan solo a través de funciones importadas y exportadas. El modelo de componentes está diseñado en torno a la composición: dos componentes pueden componerse en un solo componente cuando las exportaciones de un componente coinciden con las importaciones de otro, lo que permite virtualizar cualquier interfaz. [ 103 ] Las interfaces en WIT se agrupan en un "mundo". WASI 0.2 define un mundo CLI similar a la API tipo POSIX de WASI 0.1 y un mundo proxy HTTP para servidores web. [ 107 ]

El modelo de componentes no es compatible actualmente con los navegadores. [ 108 ]

Especificación

Entorno anfitrión

El estándar general proporciona especificaciones básicas para la API de JavaScript y detalles sobre la incrustación. [ 5 ]

Máquina virtual

El código Wasm (código binario, es decir, bytecode) está diseñado para ejecutarse en una máquina virtual portátil (VM). [ 109 ] La VM está diseñada para ser más rápida en análisis y ejecución que JavaScript y para tener una representación de código compacta. [ 110 ] Cualquier funcionalidad externa (como llamadas al sistema ) que pueda esperar el código binario Wasm no está estipulada por el estándar; en cambio, el estándar especifica cómo el entorno anfitrión puede proporcionar dicha interfaz a través de un "módulo". [ 111 ] [ 9 ]

Programa Wasm

Un programa Wasm se diseña como un módulo independiente que contiene colecciones de diversos valores definidos por Wasm y definiciones de tipos de programa. Estos se proporcionan en formato binario o textual (véase más abajo) y tienen una estructura común. [ 112 ] Dicho módulo puede proporcionar una función de inicio que se ejecuta al instanciar un binario wasm.

Conjunto de instrucciones

El estándar principal para el formato binario de un programa Wasm define una arquitectura de conjunto de instrucciones (ISA); a cada operación que puede ejecutar la máquina virtual se le asigna una codificación binaria específica (un "opcode"), pero no se especifica la forma exacta en que se implementa la operación, lo que permite flexibilidad en la construcción de una máquina virtual. [ 113 ] La lista de tipos de instrucciones incluye aquellas para carga/almacenamiento de memoria estándar, numéricas, paramétricas, de flujo de control y variables específicas de Wasm. [ 114 ]

El número de opcodes utilizados en el estándar original ( §  MVP ) era un poco menor a 200 de los 256 opcodes posibles. Las versiones posteriores de WebAssembly aumentaron el número de opcodes a un poco más de 200. La propuesta SIMD de WebAssembly (para procesamiento paralelo) introduce un prefijo de opcode alternativo (0xfd) para instrucciones SIMD de 128 bits de ancho ; la concatenación del prefijo SIMD, más un opcode que es válido después del prefijo SIMD, forma cada opcode SIMD. Los opcodes SIMD aportan 236 instrucciones adicionales a la capacidad SIMD del MVP (para un total de alrededor de 436 instrucciones) [ 115 ] [ 116 ]. Este conjunto de instrucciones [ 117 ] está habilitado por defecto en varias implementaciones importantes: [ 118 ].

  1. V8 de Google (en Google Chrome)
  2. El motor SpiderMonkey en Mozilla Firefox
  3. El motor JavaScriptCore en Safari de Apple

Estos códigos de operación SIMD son portátiles y están diseñados para mapearse directamente a conjuntos de instrucciones nativos como x86-64 y ARM . En contraste, las instrucciones SIMD no son compatibles directamente con la JVM de Java [ nota 4 ] ni con CIL de .NET ; sin embargo, ambas cuentan con algunas API para procesamiento paralelo, que proporcionan mejoras de velocidad SIMD. Un conjunto más reciente de instrucciones "SIMD relajadas" permite una cantidad limitada de comportamiento definido por la implementación para mejorar el rendimiento. [ 120 ] [ 121 ]

Representación del código

En marzo de 2017, el Grupo de la Comunidad WebAssembly llegó a un consenso sobre el formato binario inicial (" MVP "), la API de JavaScript y el intérprete de referencia. [ 122 ] Define un formato binario WebAssembly ( .wasm), diseñado para ser utilizado por computadoras, no por humanos, y un formato de texto legible por humanos ( .wat), que se asemeja a una combinación entre expresiones S y lenguajes ensamblador tradicionales. El formato binario es sencillo y está diseñado para permitir la compilación en flujo, de modo que la compilación puede comenzar antes de que el módulo termine de descargarse, y para permitir que las funciones se compilen en paralelo. [ 30 ]

La tabla que aparece a continuación muestra un ejemplo de una función factorial escrita en C y su código WebAssembly correspondiente después de la compilación, que se muestra tanto en formato de texto .wat (una representación textual legible para humanos de WebAssembly) como en formato binario .wasm (el código de bytes sin procesar , expresado a continuación en hexadecimal ), que es ejecutado por un navegador web o un entorno de ejecución que admite WebAssembly.

Todas las constantes enteras se codifican utilizando una codificación LEB128 de longitud variable y eficiente en espacio . [ 123 ]

El formato de texto WebAssembly se escribe de forma más canónica en un formato plegado utilizando expresiones S. Para instrucciones y expresiones, este formato es puramente azúcar sintáctico y no presenta diferencias de comportamiento con el formato lineal. [ 124 ] Mediante wasm2wat, el código anterior se descompila a:

( módulo ( tipo $t0 ( función ( parámetro i64 ) ( resultado i64 ))) ( función $f0 ( tipo $t0 ) ( parámetro $p0 i64 ) ( resultado i64 ) ( si $I0 ( resultado i64 ) ;; $I0 es un nombre de etiqueta no utilizado ( i64.eqz ( local.get $p0 )) ;; el nombre $p0 es el mismo que 0 aquí ( entonces ( i64.const 1 )) ( de lo contrario ( i64.mul ( local.get $p0 ) ( llamar $f0 ;; el nombre $f0 es el mismo que 0 aquí ( i64.sub ( local.get $p0 ) ( i64.const 1 ))))))))

Un módulo es generado implícitamente por el compilador. La función es referenciada por una entrada de la tabla de tipos en el binario, por lo tanto, una sección de tipos y la typeemitida por el descompilador. [ 125 ] Se puede acceder al compilador y al descompilador en línea. [ 126 ]

Memoria y variables

Los datos en memoria se almacenan en una matriz de bytes grande y expandible denominada memoria lineal . La memoria lineal está separada de la pila de llamadas y el código del módulo wasm, así como de la memoria del motor. Esto permite ejecutar código wasm en el mismo proceso que la máquina virtual JavaScript en la que está integrado, sin violar la seguridad de la memoria. [ 30 ]

Un módulo contiene una lista de variables globales separadas de la memoria lineal, que pueden ser mutables o inmutables. Las funciones declaran una lista de variables locales. Los parámetros de una función también son variables locales.

Las instrucciones operan sobre una pila de valores . La disposición de la pila es fija (las bifurcaciones deben insertar y extraer el mismo número de operandos), por lo que los motores wasm pueden eliminar la pila durante la compilación, produciendo operaciones de código máquina eficientes en los registros, en lugar de gestionar una pila en tiempo de ejecución. Se eligió una arquitectura de máquina de pila porque puede tener una mayor densidad de código que una máquina de registros . [ 30 ]

Flujo de control

A diferencia de los lenguajes ensamblador típicos, wasm solo utiliza un flujo de control estructurado similar al de los lenguajes de programación de alto nivel. La ausencia intencionada de soporte para instrucciones de salto simplifica la validación y compilación del código wasm en una sola pasada , y facilita la lectura del código desensamblado en formato de texto.

Los bloques se delimitan con las construcciones block, loop, y if/ else. Las instrucciones de salto contienen una etiqueta que identifica la profundidad del bloque en el que se encuentran anidadas: br 0saltará al bloque que contiene la instrucción, br 1saltará al bloque que contiene ese bloque, y así sucesivamente. Salta a un blocko ifsalta al final del bloque como una instrucción break, mientras que salta a un loopsalta de vuelta al principio del bucle, de forma similar a una instrucción continue. La br_tableinstrucción toma un índice de entrada y salta a un destino de una lista de etiquetas. Una instrucción switch al estilo C se puede expresar con un br_tabledentro de una serie de bloques anidados. [ 30 ] [ 127 ]

Los compiladores que utilizan wasm convierten el flujo de control no estructurado en bucles de alto nivel utilizando el algoritmo Relooper de Emscripten, diseñado originalmente para JavaScript. [ 128 ]

Funciones

Las declaraciones de funciones se enumeran en una sección aparte antes de la sección que contiene los cuerpos de las funciones. Los punteros a funciones se emulan mediante un índice en la tabla de funciones globales, ya que el código no se encuentra dentro de la memoria lineal. Las funciones también se pueden importar y exportar, proporcionando la interfaz de funciones externas para comunicarse con JavaScript u otros sistemas integrados. [ 30 ]

Véase también

Notas

  1. El archivo asm.js ya proporciona velocidades de ejecución de código casi nativas: "Incluso descartando la única puntuación en la que asm.js lo hizo mejor, se ejecuta a alrededor del 70% de la velocidad (es decir, más lento) del código C++ nativo . [ 24 ] y puede considerarse una alternativa viable para los navegadores que no admiten WebAssembly o lo tienen deshabilitado por razones de seguridad.
  2. Para el desarrollo en Rust /Wasm, las bibliotecas de terceros pueden proporcionar algunas de las E/S de JavaScript necesarias. [ 72 ] [ 73 ]
  3. "WebAssembly no proporciona acceso al entorno circundante excepto a través de la API de JavaScript descrita en la especificación de la API de JS." [ 93 ]
  4. Existe una extensión para Java que agrega intrínsecos para instrucciones SIMD x86-64, [ 119 ] que no es portable, es decir, no se puede usar en ARM o teléfonos inteligentes.

Referencias

  1. "WebAssembly/design/Semantics.md" . GitHub . Archivado del original el 15 de junio de 2021. Recuperado el 23 de febrero de 2021. El código WebAssembly puede considerarse una máquina de pila estructurada ; una máquina donde la mayoría de los cálculos utilizan una pila de valores, pero el flujo de control se expresa en construcciones estructuradas como bloques, condicionales y bucles. En la práctica, las implementaciones no necesitan mantener una pila de valores real, ni estructuras de datos reales para el control; solo necesitan comportarse como si lo hicieran.
  2. Mozilla. "Comprensión del formato de texto de WebAssembly" . MDN Web Docs . Archivado del original el 5 de febrero de 2022. Consultado el 9 de diciembre de 2019 .
  3. "Introducción: WebAssembly 1.0" . webassembly.github.io . Archivado del original el 22 de noviembre de 2021. Consultado el 18 de junio de 2019. WebAssembly es un estándar abierto...
  4. "Introducción: WebAssembly 1.0" . webassembly.github.io . Archivado del original el 22 de noviembre de 2021. Consultado el 18 de junio de 2019. WebAssembly es un... formato de código
  5. 1 2 "Convenciones: WebAssembly 1.0" . webassembly.github.io . Archivado del original el 6 de mayo de 2019. Recuperado el 17 de mayo de 2019. WebAssembly es un lenguaje de programación que tiene múltiples representaciones concretas (su formato binario y el formato de texto). Ambos se corresponden con una estructura común.
  6. "Introducción: WebAssembly 1.0" . webassembly.github.io . Archivado del original el 22 de noviembre de 2021. Recuperado el 18 de junio de 2019. ... esta especificación se complementa con documentos adicionales que definen interfaces para entornos de incrustación específicos, como la Web. Cada uno de estos definirá una interfaz de programación de aplicaciones (API) de WebAssembly adecuada para un entorno determinado.
  7. "Introducción — WebAssembly 1.1" . webassembly.github.io . Archivado del original el 22 de noviembre de 2021. Consultado el 19 de febrero de 2021. Su objetivo principal es permitir aplicaciones de alto rendimiento en la Web, pero no hace suposiciones específicas de la Web ni proporciona características específicas de la Web, por lo que también se puede emplear en otros entornos.
  8. Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 de junio de 2017). "Poniendo la Web a la Velocidad con WebAssembly" . SIGPLAN Notices . 52 (6): 185– 200. doi : 10.1145/3140587.3062363 . ISSN 0362-1340 . Si bien la Web es la principal motivación para WebAssembly, nada en su diseño depende de la Web o de un entorno JavaScript. Es un estándar abierto diseñado específicamente para integrarse en múltiples contextos, y esperamos que en el futuro estén disponibles implementaciones independientes. 
  9. 1 2 3 "Fuera de la web: binarios WebAssembly independientes usando Emscripten · V8" . v8.dev . Archivado del original el 19 de julio de 2020. Recuperado el 28 de julio de 2020 .
  10. 1 2 3 "Wasmer - El entorno de ejecución universal de WebAssembly" . wasmer.io . Archivado del original el 2 de marzo de 2021. Consultado el 19 de febrero de 2021. Compila todo a WebAssembly. Ejecútalo en cualquier sistema operativo o incorpóralo a otros lenguajes.
  11. Consorcio World Wide Web. "Especificación principal de WebAssembly" . Consorcio World Wide Web (W3) . Archivado del original el 6 de diciembre de 2019. Consultado el 9 de diciembre de 2019 .
  12. Couriol, Bruno. "WebAssembly 1.0 se convierte en una recomendación del W3C y en el cuarto lenguaje que se ejecuta de forma nativa en los navegadores" . infoq.com . Archivado del original el 25 de noviembre de 2021. Consultado el 9 de diciembre de 2019 .
  13. "Especificación de WebAssembly — WebAssembly 1.1" . webassembly.github.io . Archivado del original el 22 de septiembre de 2022. Consultado el 22 de marzo de 2021 .
  14. "Premio de Software de Lenguajes de Programación" . www.sigplan.org . Archivado del original el 29 de octubre de 2022. Consultado el 5 de octubre de 2021 .
  15. Bright, Peter (18 de junio de 2015). "La web está obteniendo su código de bytes: WebAssembly" . Ars Technica . Condé Nast . Archivado del original el 11 de abril de 2019. Recuperado el 15 de junio de 2017 .
  16. "New Bytecode Alliance lleva la seguridad, la ubicuidad y la interoperabilidad de la web al mundo de la computación ubicua" . Mozilla . 12 de noviembre de 2019. Archivado del original el 10 de diciembre de 2019. Consultado el 27 de mayo de 2019 .
  17. "Error de lanzamiento" . GitHub / WebAssembly / diseño . 11 de junio de 2015. Archivado del original el 21 de noviembre de 2021. Consultado el 21 de marzo de 2016 .
  18. Wagner, Luke (14 de marzo de 2016). "Un hito de WebAssembly: soporte experimental en múltiples navegadores" . Mozilla Hacks . Archivado del original el 11 de agosto de 2017. Recuperado el 21 de marzo de 2016 .
  19. Thompson, Seth (15 de marzo de 2016). "Soporte experimental para WebAssembly en V8" . Blog de V8 . Archivado del original el 9 de febrero de 2018. Recuperado el 25 de julio de 2019 .
  20. Zhu, Limin (15 de marzo de 2016). "Previsualización de experimentos con WebAssembly en Microsoft Edge" . Blog de desarrolladores de Microsoft Edge . Archivado del original el 18 de agosto de 2021. Recuperado el 21 de marzo de 2016 .
  21. Lardinois, Frederic (17 de junio de 2015). "Google, Microsoft, Mozilla y otros se unen para lanzar WebAssembly, un nuevo formato binario para la web" . TechCrunch . Archivado del original el 17 de enero de 2018. Consultado el 24 de diciembre de 2017 .
  22. Avram, Abel (31 de mayo de 2017). "Google dejará de ofrecer soporte para PNaCl" . InfoQ . Archivado del original el 23 de diciembre de 2017. Consultado el 22 de diciembre de 2017 .
  23. "WebAssembly: un formato binario para la web" . ②ality – JavaScript y más . 18 de junio de 2015. Archivado del original el 6 de noviembre de 2023. Recuperado el 25 de julio de 2019 . 
  24. "Mirando al sol: Dalvik vs. ASM.js vs. Nativo" . blog.mozilla.org . Agosto de 2013. Archivado del original el 7 de diciembre de 2019. Consultado el 7 de diciembre de 2019 .
  25. 1 2 3 Krill, Paul (6 de marzo de 2017). "WebAssembly ya está listo para que lo usen los navegadores" . InfoWorld . Archivado del original el 1 de abril de 2020. Recuperado el 23 de diciembre de 2017 .
  26. "Primeros borradores públicos de trabajo de WebAssembly" . W3C. 15 de febrero de 2018. Archivado del original el 16 de julio de 2021. Consultado el 20 de abril de 2018 .
  27. "Especificación principal de WebAssembly" . W3C. 15 de febrero de 2018. Archivado del original el 8 de marzo de 2021. Consultado el 20 de abril de 2018 .
  28. "Interfaz JavaScript de WebAssembly" . W3C. 15 de febrero de 2018. Archivado del original el 30 de noviembre de 2020. Consultado el 20 de abril de 2018 .
  29. "WebAssembly Web API" . W3C. 15 de febrero de 2018. Archivado del original el 19 de abril de 2021. Consultado el 20 de abril de 2018 .
  30. 1 2 3 4 5 6 Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 de junio de 2017). "Poniendo la web al día con WebAssembly". Actas de la 38.ª Conferencia ACM SIGPLAN sobre Diseño e Implementación de Lenguajes de Programación . PLDI 2017. Nueva York, NY, EE. UU.: Association for Computing Machinery . págs. 185–200 . doi : 10.1145/3062341.3062363 . ISBN  978-1-4503-4988-8.
  31. "Hilos basados ​​en trabajadores de WebAssembly - Estado de la plataforma Chrome" . chromestatus.com . Archivado del original el 19 de febrero de 2022. Consultado el 19 de febrero de 2022 .
  32. "Estado de las características - WebAssembly" . webassembly.org . Consultado el 5 de enero de 2026 .
  33. WebAssembly/hilos , WebAssembly, 3 de enero de 2026 , consultado el 5 de enero de 2026
  34. "Wasm 2.0 completado - WebAssembly" . webassembly.org . Consultado el 5 de enero de 2026 .
  35. "Wasm 3.0 completado - WebAssembly" . webassembly.org . Consultado el 5 de enero de 2026 .
  36. "La recolección de basura de WebAssembly (WasmGC) ahora está habilitada de forma predeterminada en Chrome" . Consultado el 11 de diciembre de 2023 .
  37. "Una nueva forma de llevar de manera eficiente los lenguajes de programación con recolección de basura a WebAssembly" . V8.dev . Consultado el 11 de diciembre de 2023 .
  38. Kotas, Jan (18 de septiembre de 2025). " [ wasm ] [ post-MVP ] propuesta de recolección de basura en .NET" . GitHub . Consultado el 2 de febrero de 2026. WASM-GC no tiene las capacidades requeridas por el entorno de ejecución de .NET. No es posible reemplazar el GC del entorno de ejecución de .NET con WASM-GC.
  39. "Incrustaciones no web" . WebAssembly . Archivado del original el 15 de mayo de 2019. Consultado el 15 de mayo de 2019 .
  40. "Incrustaciones no web" . GitHub / WebAssembly . Archivado del original el 13 de noviembre de 2020. Consultado el 15 de mayo de 2019 .
  41. Freese, Danny (3 de octubre de 2023). "Proxy-Wasm: es WebAssembly para proxies" . Blog. Kong . Consultado el 6 de mayo de 2024 .
  42. "proxy-wasm/spec: WebAssembly para proxies (especificación ABI)" . GitHub . Archivado del original el 6 de mayo de 2024. Consultado el 6 de mayo de 2024 .
  43. "Compatibilidad con WebAssembly ahora disponible en todos los navegadores principales" . El blog de Mozilla . Archivado del original el 31 de octubre de 2019. Consultado el 21 de noviembre de 2017 .
  44. "Presentamos nuevas optimizaciones de JavaScript, WebAssembly, SharedArrayBuffer y Atomics en EdgeHTML 16" . Blog de desarrolladores de Microsoft Edge . 31 de octubre de 2017. Archivado del original el 15 de noviembre de 2017. Consultado el 21 de noviembre de 2017 .
  45. "WebAssembly | ¿Puedo usar...? Compatibilidad con tablas para HTML5, CSS3, etc." . canIuse.com . Archivado del original el 13 de noviembre de 2021 . Consultado el 1 de marzo de 2024 .
  46. "asm.js | ¿Puedo usar...? Soporte para tablas en HTML5, CSS3, etc." . caniuse.com . Consultado el 29 de septiembre de 2024 .
  47. "Tipos de referencia de WebAssembly | ¿Puedo usar...? Tablas de soporte para HTML5, CSS3, etc." . caniuse.com . Consultado el 3 de marzo de 2024 .
  48. "Wasmtime: un entorno de ejecución pequeño y eficiente para WebAssembly y WASI" . wasmtime.dev . Archivado del original el 4 de diciembre de 2020. Consultado el 18 de diciembre de 2020 .
  49. "Hoja de ruta" . Archivado del original el 7 de diciembre de 2021. Consultado el 7 de diciembre de 2021 .
  50. Wingo, Andy (30 de junio de 2025). "WebAssembly: Sí, ¿pero para qué?" . ACM Queue . 23 (3): 18– 30. doi : 10.1145/3746171 .
  51. Ball, Kevin (26 de junio de 2018). "Cómo WebAssembly está acelerando el futuro del desarrollo web" . Archivado del original el 12 de febrero de 2019. Recuperado el 22 de octubre de 2018 .
  52. "Notas de la versión LLVM 8.0.0 — Documentación de LLVM 8" . Archivado del original el 22 de octubre de 2019. Consultado el 22 de octubre de 2019 .
  53. 1 2 3 "Lenguajes WebAssembly increíbles" . GitHub . 26 de junio de 2018. Archivado del original el 12 de febrero de 2019. Recuperado el 15 de febrero de 2022 .
  54. Krill, Paul (29 de noviembre de 2017). "La compilación directa de WebAssembly llega al lenguaje Rust" . InfoWorld . Archivado del original el 1 de abril de 2020. Recuperado el 24 de diciembre de 2017 .
  55. "AssemblyScript/assemblyscript" . El proyecto AssemblyScript. 9 de septiembre de 2020. Archivado del original el 11 de septiembre de 2020. Consultado el 9 de septiembre de 2020 .
  56. Bonventre, Andrew (24 de agosto de 2018). "Go 1.11 se ha publicado" . El blog de Go . Archivado del original el 14 de junio de 2025. Consultado el 11 de agosto de 2025 .
  57. "Preguntas frecuentes (FAQ) sobre Blazor" . Archivado del original el 18 de junio de 2018. Consultado el 18 de junio de 2018 .
  58. "Bolero: F# en WebAssembly" . fsbolero.io . Archivado del original el 4 de junio de 2019. Consultado el 25 de julio de 2019 .
  59. "Ejecutar F# en WebAssembly con Bolero" . Microsoft Learn . Microsoft. 20 de noviembre de 2019. Consultado el 17 de septiembre de 2025 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  60. "Pyodide: Llevando el conjunto de herramientas científicas de Python al navegador – Mozilla Hacks" . Archivado del original el 3 de septiembre de 2020. Consultado el 9 de septiembre de 2020 .
  61. "Compilador de Java a WebAssembly - CheerpJ" . Archivado del original el 27 de abril de 2023. Consultado el 27 de abril de 2023 .
  62. "JWebAssembly" . 27 de abril de 2023. Archivado del original el 27 de abril de 2023. Recuperado el 27 de abril de 2023 a través de GitHub.
  63. "TeaVM: Descripción general" . Archivado del original el 27 de abril de 2023. Consultado el 27 de abril de 2023 .
  64. "Llevando Kotlin a la Web" . Consultado el 11 de diciembre de 2023 .
  65. Deleuze, Sébastien (13 de febrero de 2023). "El enorme potencial de Kotlin/Wasm" . Recuperado el 11 de diciembre de 2023 .
  66. "Uso del backend WebAssembly de GHC" . Archivado del original el 1 de mayo de 2025. Consultado el 1 de mayo de 2025 .
  67. "Julia en el navegador" . nextjournal.com . Archivado del original el 24 de marzo de 2019. Consultado el 9 de abril de 2019 .
  68. " MRuby en tu navegador" . ruby.dj. Archivado del original el 8 de agosto de 2019. Consultado el 25 de julio de 2019 .
  69. Paul Krill (24 de agosto de 2020). "La actualización del lenguaje Ring se centra en WebAssembly" . InfoWorld. Archivado del original el 14 de octubre de 2020. Consultado el 17 de agosto de 2024 .
  70. "Compilación de WebAssembly (Wasm)" . dart.dev . Consultado el 21 de diciembre de 2025 .
  71. "Hoot: Scheme en WebAssembly" . Consultado el 11 de marzo de 2026 .
  72. "stdweb - Rust" . docs.rs. Archivado del original el 21 de febrero de 2019. Consultado el 5 de junio de 2019. El objetivo de esta biblioteca es proporcionar enlaces de Rust a las API web y permitir un alto grado de interoperabilidad entre Rust y JavaScript.
  73. "web_sys - Rust" . docs.rs. Archivado del original el 15 de mayo de 2020. Recuperado el 5 de junio de 2019. Enlaces de API sin procesar para API web . Este es un crate generado proceduralmente a partir de WebIDL del navegador que proporciona un enlace a todas las API que el navegador proporciona en la web.
  74. "El estado de WebAssembly 2023" . Scott Logic. 18 de octubre de 2023. Archivado del original el 14 de marzo de 2024. Consultado el 14 de marzo de 2024 .
  75. "Wasm necesita una mejor gestión de memoria · Problema n.° 1397 · WebAssembly/design" . GitHub . Archivado del original el 27 de marzo de 2021. Consultado el 15 de febrero de 2021 .
  76. "WebAssembly/content-security-policy" . GitHub . Archivado del original el 12 de septiembre de 2020. Consultado el 17 de febrero de 2021 .
  77. "948834 - chromium - Un proyecto de código abierto para ayudar a que la web avance. - Monorail" . bugs.chromium.org . Archivado del original el 2 de junio de 2021. Consultado el 17 de febrero de 2021 .
  78. 1 2 "No hay forma de usar WebAssembly en Chrome sin 'unsafe-eval' · Problema n.° 7 · WebAssembly/content-security-policy" . GitHub . Archivado del original el 18 de marzo de 2021. Recuperado el 17 de febrero de 2021 .
  79. Cimpanu, Catalin (24 de junio de 2018). "Los cambios en WebAssembly podrían dejar sin efecto los parches para navegadores Meltdown y Spectre" . Bleeping Computer . Archivado del original el 10 de julio de 2019. Recuperado el 8 de junio de 2019 .
  80. Sanders, James (25 de junio de 2018). "Cómo el código opaco de WebAssembly podría aumentar el riesgo de ataques Spectre en línea" . Tech Republic . Archivado del original el 9 de junio de 2019. Recuperado el 9 de junio de 2019 .
  81. R, Bhagyashree (30 de octubre de 2018). "Google Chrome 70 ahora admite subprocesos de WebAssembly para crear aplicaciones web multiproceso" . Packt Pub . Archivado del original el 18 de abril de 2019. Recuperado el 9 de junio de 2019 .
  82. 1 2 Lonkar, Aishwarya; Chandrayan, Siddhesh (octubre de 2018). "El lado oscuro de WebAssembly" . Virus Bulletin . Archivado del original el 9 de junio de 2019. Recuperado el 8 de junio de 2019 .
  83. Segura, Jérôme (29 de noviembre de 2017). "La criptominería persistente por impulso llegará a un navegador cercano" . Malwarebytes . Archivado del original el 15 de abril de 2019. Recuperado el 8 de junio de 2019 .
  84. "Un estudio reciente estima que el 50% de los sitios web que utilizan WebAssembly lo emplean con fines maliciosos" . InfoQ . Archivado del original el 31 de octubre de 2019. Consultado el 3 de noviembre de 2019 .
  85. Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (junio de 2019). «El nuevo chico de la web: un estudio sobre la prevalencia de WebAssembly en la práctica». Detección de intrusiones y malware, y evaluación de vulnerabilidades (PDF) . Notas de clase en informática. Vol. 11543. Detección de intrusiones y malware, y evaluación de vulnerabilidades. págs. 23–42 . doi : 10.1007/978-3-030-22038-9_2 . ISBN   978-3-030-22037-2. S2CID 184482682 . Archivado del original (PDF) el 26 de julio de 2022 . Recuperado el 15 de febrero de 2022 . Diapositivas (PDF) Archivadas el 3 de noviembre de 2019 en Wayback Machine.
  86. Aaron Hilbig, Daniel Lehmann y Michael Pradel (abril de 2021). «Un estudio empírico de binarios WebAssembly del mundo real: seguridad, lenguajes y casos de uso». (Archivado en abril de 2021) https://software-lab.org/publications/www2021.pdf
  87. Watt, Conrad (8 de enero de 2018). «Mecanización y verificación de la especificación WebAssembly» . Actas de la 7.ª Conferencia Internacional ACM SIGPLAN sobre Programas y Pruebas Certificados . CPP 2018. Los Ángeles, CA, EE. UU.: ACM. págs. 53-65 . doi : 10.1145/3167082 . ISBN  978-1-4503-5586-5. S2CID 9401691 . Archivado del original el 1 de marzo de 2021 . Recuperado el 9 de agosto de 2023 . 
  88. Jangda, Abhinav; Powers, Bobby; Berger, Emery; Guha, Arjun (31 de mayo de 2019). No tan rápido: análisis del rendimiento de WebAssembly frente al código nativo (PDF) . Conferencia Técnica Anual USENIX 2019. Renton, WA. págs. 107–120 . arXiv : 1901.09056v3 . OCLC 1106328738. Archivado (PDF) del original el 20 de marzo de 2025. Recuperado el 20 de marzo de 2025 .  
  89. Yan, Yutian; Tu, Tengfei; Zhao, Lijian; Zhou, Yuchen; Wang, Weihang (2 de noviembre de 2021). «Comprensión del rendimiento de las aplicaciones WebAssembly» . Actas de la 21.ª Conferencia ACM sobre Medición de Internet . págs. 533–549 . doi : 10.1145/3487552.3487827 . ISBN  978-1-4503-9129-0.
  90. De Macedo, Joao; Abreu, Rui; Pereira, Rui; Saraiva, Joao (junio de 2022). "WebAssembly versus JavaScript: energía y rendimiento en tiempo de ejecución". 2022 Conferencia Internacional sobre TIC para la Sostenibilidad (ICT4S) . págs. 24 a 34. doi : 10.1109/ICT4S55073.2022.00014 . hdl : 1822/90291 . ISBN  978-1-6654-8286-8.
  91. "Zaplib post-mortem" . zaplib.com . Abril de 2022. Archivado del original el 21 de marzo de 2024. Consultado el 14 de marzo de 2024 .
  92. Denis, Frank (4 de enero de 2023). "Rendimiento de los entornos de ejecución de WebAssembly en 2023" . 00f.net . Consultado el 6 de diciembre de 2024 .
  93. "WebAssembly Web API" . webassembly.github.io . Archivado del original el 9 de diciembre de 2024. Consultado el 6 de diciembre de 2024 .
  94. Kambale, Enoch. "WebAssembly en 2024: promesas, desafíos y el camino a seguir" . blog.enkambale.com . Archivado del original el 17 de enero de 2025. Consultado el 6 de diciembre de 2024 .
  95. "WebAssembly System Interface Repo" . GitHub : WebAssembly . 10 de febrero de 2020. Archivado del original el 30 de octubre de 2022. Consultado el 15 de mayo de 2019 .
  96. "Información adicional sobre capacidades" . GitHub . bytecodealliance. 4 de marzo de 2022. Archivado del original el 24 de febrero de 2020. Consultado el 8 de abril de 2020 .
  97. "Estandarización de WASI: una interfaz de sistema para ejecutar WebAssembly fuera de la web" . Mozilla Hacks: el blog para desarrolladores web . Archivado del original el 30 de octubre de 2022. Consultado el 9 de abril de 2020 .
  98. "Repositorio reference-sysroot" . GitHub : WebAssembly . 12 de enero de 2020. Archivado del original el 21 de agosto de 2022. Consultado el 15 de mayo de 2019 .
  99. "wasm-c-api Repo" . GitHub : WebAssembly . 3 de febrero de 2020. Archivado del original el 31 de octubre de 2022. Consultado el 15 de mayo de 2019 .
  100. NuxiNL/cloudlibc , Nuxi, 6 de diciembre de 2024, archivado del original el 1 de abril de 2025 , recuperado el 1 de abril de 2025
  101. Hykes, Solomon (27 de marzo de 2019). "Solomon Hykes en X" . Twitter . Archivado del original el 31 de mayo de 2024. Recuperado el 29 de septiembre de 2024 .
  102. "WASI y el modelo de componentes WebAssembly: estado actual - eunomia" . eunomia.dev . Consultado el 30 de marzo de 2026 .
  103. 1 2 "¿Por qué el modelo de componentes? - El modelo de componentes de WebAssembly" . component-model.bytecodealliance.org . Consultado el 30 de marzo de 2026 .
  104. Dice, Joel (13 de marzo de 2025). "Perspectivas para WASIp3" . www.fermyon.com . Consultado el 30 de marzo de 2026 .
  105. WebAssembly. "component-model/design/mvp/Concurrency.md en main · WebAssembly/component-model" . GitHub . Consultado el 30 de marzo de 2026 .
  106. "Referencia WIT - El modelo de componentes de WebAssembly" . component-model.bytecodealliance.org . Consultado el 30 de marzo de 2026 .
  107. ^ Gohman, Dan (25 de enero de 2024). "Lanzamiento de WASI 0.2" . Alianza de código de bytes . Consultado el 30 de marzo de 2026 .
  108. "¿Por qué WebAssembly es un lenguaje de segunda categoría en la web? – Mozilla Hacks - el blog para desarrolladores web" . Mozilla Hacks – el blog para desarrolladores web . Consultado el 30 de marzo de 2026 .
  109. "Fundamentos del diseño" . GitHub /WebAssembly/design . 1 de octubre de 2016. Archivado del original el 25 de septiembre de 2022. Consultado el 25 de septiembre de 2022 .
  110. "Objetivos de alto nivel de WebAssembly" . GitHub /WebAssembly/design . 11 de diciembre de 2015. Archivado del original el 25 de septiembre de 2022. Consultado el 25 de septiembre de 2022 .
  111. "Portabilidad - WebAssembly" . webassembly.org . Archivado del original el 28 de julio de 2020. Consultado el 28 de julio de 2020 .
  112. "Convenciones — WebAssembly 1.0" . webassembly.github.io . Archivado del original el 6 de mayo de 2019. Consultado el 12 de noviembre de 2019 .
  113. "Introducción: WebAssembly 1.0" . webassembly.github.io . Archivado del original el 2 de junio de 2021. Consultado el 17 de mayo de 2019 .
  114. "Instrucciones — WebAssembly 1.0" . webassembly.github.io . Archivado del original el 21 de octubre de 2019. Consultado el 12 de noviembre de 2019 .
  115. Lively, Thomas (19 de febrero de 2021) [Solicitud de extracción abierta el 5 de febrero de 2021]. "Códigos de operación finales por tlively · Solicitud de extracción n.° 452 · WebAssembly/simd · GitHub" . Bytecode Alliance. Archivado del original el 30 de octubre de 2022. Recuperado el 12 de mayo de 2021 a través de GitHub .
  116. Delendik, Yury (19 de febrero de 2021) [Cambios SIMD confirmados el 19 de febrero de 2021]. "Archivo wasm-tools/expr.rs en b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub" . Bytecode Alliance. Archivado del original el 22 de mayo de 2022. Recuperado el 12 de mayo de 2021 vía GitHub .
  117. "Actualizar intérprete y texto con códigos de operación finalizados por ngzhian · Solicitud de extracción n.° 486 · WebAssembly/simd" . GitHub . Archivado del original el 30 de octubre de 2022. Recuperado el 14 de mayo de 2021 .
  118. "WebAssembly/simd" . GitHub . Archivado del original el 10 de mayo de 2021. Consultado el 14 de mayo de 2021 .
  119. "Cómo hicimos que la JVM fuera 40 veces más rápida" . astojanov.github.io . Archivado del original el 26 de diciembre de 2020. Consultado el 17 de febrero de 2021 .
  120. WebAssembly/relaxed-simd , WebAssembly, 3 de mayo de 2021, archivado del original el 17 de abril de 2022 , recuperado el 14 de mayo de 2021
  121. "Wasm 3.0 completado - WebAssembly" . webassembly.org . Consultado el 5 de enero de 2026 .
  122. "Hoja de ruta" . WebAssembly . Marzo de 2017. Archivado del original el 7 de diciembre de 2021. Consultado el 25 de julio de 2019 .
  123. Grupo de la comunidad de WebAssembly (enero de 2020). "Especificación de WebAssembly, versión 1.0" . Archivado del original el 21 de octubre de 2019. Consultado el 13 de enero de 2020 .
  124. "Instrucciones plegadas" . GitHub . Archivado del original el 12 de julio de 2018. Consultado el 18 de junio de 2018 ./ WebAssembly / especificación
  125. "Módulos (binario)" . WebAssembly 1.0 . Archivado del original el 30 de octubre de 2022. Consultado el 9 de abril de 2020 .
  126. "Demostraciones de WebAssembly Binary Toolkit (wabt)" . webassembly.github.io . Archivado del original el 30 de octubre de 2022. Consultado el 9 de abril de 2020 .
  127. "Instrucciones de flujo de control de WebAssembly - WebAssembly | MDN" . MDN Web Docs . 23 de noviembre de 2025. Consultado el 5 de enero de 2026 .
  128. Zakai, Alon (22 de octubre de 2011). "Emscripten: Un compilador de LLVM a JavaScript" . Actas de la conferencia internacional de la ACM sobre lenguajes, sistemas y aplicaciones de programación orientada a objetos . OOPSLA '11. Nueva York, NY, EE. UU.: Association for Computing Machinery . págs. 301–312 . doi : 10.1145/2048147.2048224 . ISBN  978-1-4503-0942-4.

 Este artículo incorpora texto de una obra de contenido libre . Licenciado bajo la Licencia Apache 2.0 ( declaración de licencia/permiso ). Texto tomado de Formato de texto , jfbastien; rossberg-chromium; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAssembly/diseño.

  • Sitio web oficialEdita esto en Wikidata
  • WebAssembly en GitHub aloja documentos de diseño.
  • Grupo comunitario del W3C archivado el 18 de junio de 2015 en Wayback Machine.
  • Especificación de WebAssembly archivada el 22 de septiembre de 2022 en Wayback Machine .
  • "WebAssembly" . MDN Web Docs . 16 de abril de 2024. Archivado del original el 13 de mayo de 2022. Consultado el 14 de febrero de 2018 .Contiene información sobre la compatibilidad con navegadores y las especificaciones (API de JavaScript WebAssembly).