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 was first announced in 2015,[17] and the first demonstration was executing Unity's Angry Bots in Firefox,[18]Google Chrome,[19] and Microsoft Edge [Legacy].[20] The precursor technologies were asm.js from Mozilla and Google Native Client,[21][22] and the initial implementation was based on the feature set of asm.js.[23][note 1]
In March 2017, the design of the minimum viable product (MVP) was declared to be finished and the preview phase ended.[25] In late September 2017, Safari 11 was released with support. In February 2018, the WebAssembly Working Group published three public working drafts for the Core Specification, JavaScript Interface, and Web API.[26][27][28][29]
The MVP was focused on low-level languages such as C and C++, with the intent to add features useful for high-level languages in a future version.[30]
Multithreading is currently a draft, but has been supported by Chrome since version 75 in June 2019, Firefox version 79, and Safari version 14.1[31][32][33]
The WebAssembly 2.0 specification was finished in 2022 and became a W3C standard in December 2024. It adds many single instruction, multiple data (SIMD) related instructions and a new v128 datatype, with the ability for functions to return multiple values, mass memory initialize/copy instructions, and reference types, which are opaque pointers to objects outside of the linear memory.[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:
- C y C++ : a través de Emscripten o Clang independiente. [ 25 ]
- Rust : a través de rustc con objetivo Wasm. [ 54 ] [ 53 ]
- AssemblyScript : un lenguaje similar a TypeScript que compila directamente a Wasm. [ 55 ]
- Go : soporte nativo para WebAssembly introducido en Go 1.11. [ 56 ]
- Lenguajes .NET : C# (a través de Blazor ), F# (a través de Bolero y Blazor). [ 57 ] [ 58 ] [ 59 ]
- Python : implementaciones como Pyodide. [ 60 ]
- Lenguajes Java y máquina virtual Java (JVM): vía CheerpJ, [ 61 ] JWebAssembly, [ 62 ] y TeaVM. [ 63 ]
- Kotlin : soporte para compilación directa de Wasm. [ 64 ] [ 65 ]
- Haskell : compatible a través del backend del compilador Glasgow Haskell (GHC). [ 66 ]
- Julia : implementaciones comunitarias. [ 67 ]
- Ruby : compatible a través de MRuby. [ 68 ]
- Anillo: compatible con el backend Wasm. [ 69 ]
- Dart : admitía WebAssembly como destino de compilación al crear aplicaciones Dart y Flutter para la web. [ 70 ]
- Esquema : GNU Guile a través de Hoot. [ 71 ]
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.
In 2019, a group of researchers from the University of Massachusetts Amherst presented a comprehensive analysis of WebAssembly's performance compared to native code.[88] This study used the SPEC CPU suite of benchmarks and a system called "Browsix-Wasm" to run unmodified Unix applications in the browser, thereby allowing for a test of real-world applications, finding a significant performance gap between Wasm execution and native execution; in particular, Wasm programs showed an average slowdown of 45% in Firefox and 55% in Chrome across the real-world benchmarks; peak slowdowns resulted in a Wasm program taking 2.08 times as long to run in Firefox and 2.5 times as long to run in Chrome. The paper identified several reasons for this performance difference, including missing optimizations, code generation issues in WebAssembly compilers, and inherent limits of the WebAssembly platform.
A 2021 study suggested that WebAssembly is much faster than JavaScript in certain cases, such as running a complex function on a small file (e.g., processing a graphics file); however, at the time, the JavaScript interpreter had some optimizations available that the WebAssembly implementations did not have (e.g., Just-in-time compilation).[89]
In 2022, it was determined by researchers that a Wasm program runs at about 120% of (or 20% faster than) the speed of a comparable JavaScript program.[90] Those findings align with the experience of a startup company named "Zaplib", whose founders summarized in a blog that it was shutting down due to lack of performance in WebAssembly.[91] Their goal had been to significantly increase the performance of existing web apps by incrementally porting them to Rust/Wasm; however, porting a customer's simulator from JavaScript yielded only a 5% improvement in performance. Similarly, regarding Figma, they stated the following:
[Upon] closer inspection it seems that [Figma's] use of Wasm is more due to historical accidents—wanting to build in C++ to hedge for their native app—than for critical performance needs. Figma files are processed in C++/Wasm, and this is likely a huge speedup, but most of Figma's performance magic is due to their WebGL renderer.
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 de 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 ].
- V8 de Google (en Google Chrome)
- El motor SpiderMonkey en Mozilla Firefox
- 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.
Instructions operate on a stack of values. The stack layout is fixed (branches must push and pop the same number of operands), so wasm engines can compile the stack away, producing efficient machine code operations on registers, rather than managing a stack at runtime. A stack machine architecture was chosen as it can have higher code density than a register machine.[30]
Control flow
Unlike typical assembly languages, wasm only uses structured control flow similar to high-level programming languages. The intentional lack of support for jump instructions makes it simple to validate and compile wasm code in a single pass, and makes it easier to read code disassembled into the text format.
Blocks are delimited with the block, loop, and if/else constructs. Branch instructions contain a label that identifies the depth of a block it is nested in: br 0 will branch to the block the instruction is contained in, br 1 will branch to the block that block is contained in, and so on. Branches to a block or if jump to the end of the block like a break statement, while branches to a loop jump back to the beginning of the loop, similar to a continue statement. The br_table instruction takes an input index and jumps to a target from a list of labels. A C-style switch statement can be expressed with a br_table inside a series of nested blocks.[30][127]
Compilers targeting wasm convert unstructured control flow into high-level loops using Emscripten's Relooper algorithm, originally designed to target JavaScript.[128]
Functions
Function declarations are listed in a separate section before the section containing the function bodies. Function pointers are emulated using an index into the global functions table, since code is not inside the linear memory. Functions can also be imported and exported, providing the foreign function interface to communicate with JavaScript or other embedders.[30]
See also
Notes
- ↑The asm.js file already provides near-native code execution speeds: "Even discarding the one score where asm.js did better, it executes at around 70% of the speed (i.e., slower) of native C++ code.[24] and can be considered a viable alternative for browsers that do not support WebAssembly or have it disabled for security reasons.
- ↑For Rust/Wasm development, third-party libraries can provide some of the necessary JavaScript I/O.[72][73]
- ↑"WebAssembly provides no access to the surrounding environment other than via the JavaScript API described in the JS API specification."[93]
- ↑There is an extension for Java adding intrinsics for x86-64 SIMD instructions,[119] that is not portable, i.e. not usable on ARM or smartphones.
References
- ↑"WebAssembly/design/Semantics.md". GitHub. Archived from the original on 15 June 2021. Retrieved 23 February 2021.
WebAssembly code can be considered a structured stack machine; a machine where most computations use a stack of values, but control flow is expressed in structured constructs such as blocks, ifs, and loops. In practice, implementations need not maintain an actual value stack, nor actual data structures for control; they need only behave as if they did so.
- ↑Mozilla. "Understanding WebAssembly text format". MDN Web Docs. Archived from the original on 5 February 2022. Retrieved 9 December 2019.
- ↑"Introduction: WebAssembly 1.0". webassembly.github.io. Archived from the original on 22 November 2021. Retrieved 18 June 2019.
WebAssembly is an open standard...
- ↑"Introduction: WebAssembly 1.0". webassembly.github.io. Archived from the original on 22 November 2021. Retrieved 18 June 2019.
WebAssembly is a ... code format
- 12"Conventions: WebAssembly 1.0". webassembly.github.io. Archived from the original on 6 May 2019. Retrieved 17 May 2019.
WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure.
- ↑"Introduction: WebAssembly 1.0". webassembly.github.io. Archived from the original on 22 November 2021. Retrieved 18 June 2019.
... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment.
- ↑"Introduction — WebAssembly 1.1". webassembly.github.io. Archived from the original on 22 November 2021. Retrieved 19 February 2021.
Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.
- ↑Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 June 2017). "Bringing the Web Up to Speed with WebAssembly". SIGPLAN Notices. 52 (6): 185–200. doi:10.1145/3140587.3062363. ISSN 0362-1340.
While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future.
- 123"Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. Archived from the original on 19 July 2020. Retrieved 28 July 2020.
- 123"Wasmer - The Universal WebAssembly Runtime". wasmer.io. Archived from the original on 2 March 2021. Retrieved 19 February 2021.
Compile everything to WebAssembly. Run it on any OS or embed it into other languages.
- ↑World Wide Web Consortium. "WebAssembly Core Specification". World Wide Web Consortium (W3). Archived from the original on 6 December 2019. Retrieved 9 December 2019.
- ↑ 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 .
- ↑ "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 .
- ↑ "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 .
- ↑ 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 .
- ↑ "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 .
- ↑ "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 .
- ↑ 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 .
- ↑ 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 .
- ↑ 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 .
- ↑ 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 .
- ↑ 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 .
- ↑ "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 .
- ↑ "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 .
- 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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "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 .
- 123456Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 June 2017). "Bringing the web up to speed with WebAssembly". Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation. PLDI 2017. New York, NY, USA: Association for Computing Machinery. pp. 185–200. doi:10.1145/3062341.3062363. ISBN 978-1-4503-4988-8.
- ↑"WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com. Archived from the original on 19 February 2022. Retrieved 19 February 2022.
- ↑"Feature Status - WebAssembly". webassembly.org. Retrieved 5 January 2026.
- ↑WebAssembly/threads, WebAssembly, 3 January 2026, retrieved 5 January 2026
- ↑"Wasm 2.0 Completed - WebAssembly". webassembly.org. Retrieved 5 January 2026.
- ↑"Wasm 3.0 Completed - WebAssembly". webassembly.org. Retrieved 5 January 2026.
- ↑"WebAssembly Garbage Collection (WasmGC) now enabled by default in Chrome". Retrieved 11 December 2023.
- ↑"A new way to bring garbage collected programming languages efficiently to WebAssembly". V8.dev. Retrieved 11 December 2023.
- ↑Kotas, Jan (18 September 2025). "[wasm][post-MVP] garbage collection proposal in .NET". GitHub. Retrieved 2 February 2026.
WASM-GC does not have capabilities required by .NET runtime. It is not possible to replace .NET runtime's GC with WASM-GC.
- ↑"Non-Web Embeddings". WebAssembly. Archived from the original on 15 May 2019. Retrieved 15 May 2019.
- ↑"Non-Web Embeddings". GitHub / WebAssembly. Archived from the original on 13 November 2020. Retrieved 15 May 2019.
- ↑ Freese, Danny (3 de octubre de 2023). "Proxy-Wasm: es WebAssembly para proxies" . Blog. Kong . Consultado el 6 de mayo de 2024 .
- ↑ "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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "asm.js | ¿Puedo usar...? Soporte para tablas en HTML5, CSS3, etc." . caniuse.com . Consultado el 29 de septiembre de 2024 .
- ↑ "Tipos de referencia de WebAssembly | ¿Puedo usar...? Tablas de soporte para HTML5, CSS3, etc." . caniuse.com . Consultado el 3 de marzo de 2024 .
- ↑ "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 .
- ↑ "Hoja de ruta" . Archivado del original el 7 de diciembre de 2021. Consultado el 7 de diciembre de 2021 .
- ↑ Wingo, Andy (30 de junio de 2025). "WebAssembly: Sí, ¿pero para qué?" . ACM Queue . 23 (3): 18– 30. doi : 10.1145/3746171 .
- ↑ 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 .
- ↑ "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 .
- 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 .
- ↑ 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 .
- ↑ "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 .
- ↑ 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 .
- ↑ "Preguntas frecuentes (FAQ) sobre Blazor" . Archivado del original el 18 de junio de 2018. Consultado el 18 de junio de 2018 .
- ↑ "Bolero: F# en WebAssembly" . fsbolero.io . Archivado del original el 4 de junio de 2019. Consultado el 25 de julio de 2019 .
- ↑ "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 ) - ↑ "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 .
- ↑ "Compilador de Java a WebAssembly - CheerpJ" . Archivado del original el 27 de abril de 2023. Consultado el 27 de abril de 2023 .
- ↑ "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.
- ↑ "TeaVM: Descripción general" . Archivado del original el 27 de abril de 2023. Consultado el 27 de abril de 2023 .
- ↑ "Llevando Kotlin a la Web" . Consultado el 11 de diciembre de 2023 .
- ↑ Deleuze, Sébastien (13 de febrero de 2023). "El enorme potencial de Kotlin/Wasm" . Recuperado el 11 de diciembre de 2023 .
- ↑ "Uso del backend WebAssembly de GHC" . Archivado del original el 1 de mayo de 2025. Consultado el 1 de mayo de 2025 .
- ↑ "Julia en el navegador" . nextjournal.com . Archivado del original el 24 de marzo de 2019. Consultado el 9 de abril de 2019 .
- ↑ " MRuby en tu navegador" . ruby.dj. Archivado del original el 8 de agosto de 2019. Consultado el 25 de julio de 2019 .
- ↑ 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 .
- ↑ "Compilación de WebAssembly (Wasm)" . dart.dev . Consultado el 21 de diciembre de 2025 .
- ↑ "Hoot: Scheme en WebAssembly" . Consultado el 11 de marzo de 2026 .
- ↑ "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.
- ↑ "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.
- ↑ "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 .
- ↑ "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 .
- ↑ "WebAssembly/content-security-policy" . GitHub . Archivado del original el 12 de septiembre de 2020. Consultado el 17 de febrero de 2021 .
- ↑ "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 .
- 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 .
- ↑ 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 .
- ↑ 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 .
- ↑ 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 .
- 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 .
- ↑ 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 .
- ↑ "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 .
- ↑ 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.
- ↑ 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
- ↑ 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 .
- ↑ 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 .
- ↑ 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.
- ↑ 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.
- ↑ "Zaplib post-mortem" . zaplib.com . Abril de 2022. Archivado del original el 21 de marzo de 2024. Consultado el 14 de marzo de 2024 .
- ↑ 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 .
- ↑ "WebAssembly Web API" . webassembly.github.io . Archivado del original el 9 de diciembre de 2024. Consultado el 6 de diciembre de 2024 .
- ↑ 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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "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 .
- ↑ NuxiNL/cloudlibc , Nuxi, 6 de diciembre de 2024, archivado del original el 1 de abril de 2025 , recuperado el 1 de abril de 2025
- ↑ 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 .
- ↑ "WASI y el modelo de componentes WebAssembly: estado actual - eunomia" . eunomia.dev . Consultado el 30 de marzo de 2026 .
- 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 .
- ↑ Dice, Joel (13 de marzo de 2025). "Perspectivas para WASIp3" . www.fermyon.com . Consultado el 30 de marzo de 2026 .
- ↑ WebAssembly. "component-model/design/mvp/Concurrency.md en main · WebAssembly/component-model" . GitHub . Consultado el 30 de marzo de 2026 .
- ↑ "Referencia WIT - El modelo de componentes de WebAssembly" . component-model.bytecodealliance.org . Consultado el 30 de marzo de 2026 .
- ^ 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 .
- ↑ "¿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 .
- ↑ "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 .
- ↑ "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 .
- ↑ "Portabilidad - WebAssembly" . webassembly.org . Archivado del original el 28 de julio de 2020. Consultado el 28 de julio de 2020 .
- ↑ "Convenciones — WebAssembly 1.0" . webassembly.github.io . Archivado del original el 6 de mayo de 2019. Consultado el 12 de noviembre de 2019 .
- ↑ "Introducción: WebAssembly 1.0" . webassembly.github.io . Archivado del original el 2 de junio de 2021. Consultado el 17 de mayo de 2019 .
- ↑ "Instrucciones — WebAssembly 1.0" . webassembly.github.io . Archivado del original el 21 de octubre de 2019. Consultado el 12 de noviembre de 2019 .
- ↑ 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 .
- ↑ 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 .
- ↑ "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 .
- ↑ "WebAssembly/simd" . GitHub . Archivado del original el 10 de mayo de 2021. Consultado el 14 de mayo de 2021 .
- ↑ "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 .
- ↑ 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
- ↑ "Wasm 3.0 completado - WebAssembly" . webassembly.org . Consultado el 5 de enero de 2026 .
- ↑ "Hoja de ruta" . WebAssembly . Marzo de 2017. Archivado del original el 7 de diciembre de 2021. Consultado el 25 de julio de 2019 .
- ↑ 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 .
- ↑ "Instrucciones plegadas" . GitHub . Archivado del original el 12 de julio de 2018. Consultado el 18 de junio de 2018 ./ WebAssembly / especificación
- ↑ "Módulos (binario)" . WebAssembly 1.0 . Archivado del original el 30 de octubre de 2022. Consultado el 9 de abril de 2020 .
- ↑ "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 .
- ↑ "Instrucciones de flujo de control de WebAssembly - WebAssembly | MDN" . MDN Web Docs . 23 de noviembre de 2025. Consultado el 5 de enero de 2026 .
- ↑ 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.
Enlaces externos
- Sitio web oficial

- 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).
- lenguajes ensamblador
- Propiedades de Internet establecidas en 2015
- Estándares del Consorcio World Wide Web
- Programación web
- Códigos de bytes
- Lenguajes de programación creados en 2015
- Comparación de lenguajes de programación