WebAssembly (a veces abreviado Wasm ) es un estándar abierto que define un formato de código binario portátil para programas ejecutables y un lenguaje ensamblador textual correspondiente , así como interfaces para facilitar las interacciones entre dichos programas y su entorno anfitrión. [2] [3] [4] [5] El objetivo principal de WebAssembly es habilitar aplicaciones de alto rendimiento en páginas web , pero el formato está diseñado para ejecutarse e integrarse también en otros entornos, incluidos los independientes. [6] [7] [8]
Paradigma | máquina de pila estructurada [1] |
---|---|
Diseñada por | W3C |
Desarrollador | |
Apareció por primera vez | Marzo de 2017 |
SO | Plataforma independiente |
Licencia | Licencia Apache 2.0 |
Extensiones de nombre de archivo |
|
Sitio web | webassembly |
Influenciado por | |
WebAssembly (es decir, WebAssembly Core Specification (entonces la versión 1.0, 1.1 está en borrador [9] ) y WebAssembly JavaScript Interface [10] ) se convirtió en una recomendación del World Wide Web Consortium el 5 de diciembre de 2019, [11] junto con HTML , CSS y JavaScript . [12]
WebAssembly puede admitir (al menos en teoría) cualquier lenguaje (por ejemplo, compilado o interpretado) en cualquier sistema operativo (con la ayuda de las herramientas adecuadas), [13] y en la práctica todos los lenguajes más populares ya tienen al menos algún nivel de soporte.
El SDK de Emscripten puede compilar cualquier código fuente de lenguajes compatibles con LLVM (como C , C ++ o Rust , entre otros) en un archivo binario que se ejecuta en el mismo espacio aislado que el código JavaScript. [nota 1] Emscripten proporciona enlaces para varias interfaces de entorno de uso común como WebGL . No hay acceso directo a Document Object Model (DOM); sin embargo, es posible crear funciones de proxy para esto, por ejemplo a través de stdweb, [18] web_sys, [19] y js_sys [20] cuando se usa el lenguaje Rust .
Las implementaciones de WebAssembly usualmente usan compilación anticipada (AOT) o justo a tiempo (JIT), pero también pueden usar un intérprete . Si bien las implementaciones más conocidas actualmente pueden estar en navegadores web , también hay implementaciones que no son de navegador para uso general, incluido WebAssembly Micro Runtime, [21] un proyecto de Bytecode Alliance (con subproyecto iwasm code VM compatible con "intérprete", antes de compilación de tiempo (AoT) y compilación Just-in-Time (JIT) " [22] ), Wasmtime, [23] y Wasmer. [13]
El Consorcio World Wide Web (W3C) mantiene el estándar con contribuciones de Mozilla , Microsoft , Google , Apple , Fastly , Intel y Red Hat . [24] [21]
Historia
WebAssembly fue anunciado por primera vez en 2015, [25] y la primera demostración estaba ejecutando Unity 's Angry Motores de búsqueda en Firefox , [26] Google Chrome , [27] y Microsoft Edge . [28] Las tecnologías precursoras fueron asm.js de Mozilla y Google Native Client , [29] [30] y la implementación inicial se basó en el conjunto de características de asm.js. [31] La tecnología asm.js ya proporciona velocidades de ejecución de código casi nativas [32] y puede considerarse una alternativa viable para navegadores que no soportan WebAssembly o lo tienen deshabilitado por razones de seguridad.
En marzo de 2017 se declaró terminado el diseño del producto mínimo viable (MVP) y finalizó la fase de avance. [33] A finales de septiembre de 2017[actualizar], Safari 11 fue lanzado 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 de JavaScript y la API web. [34] [35] [36] [37]
Implementaciones
Si bien 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 él, en contextos más generalizados. [38] [39] Dado que los entornos de ejecución (RE) de WebAssembly son máquinas de pila virtual de bajo nivel (similares a JVM o Flash VM ) que pueden integrarse en aplicaciones host, algunas de ellas han encontrado una forma de entornos de ejecución independientes como Wasmtime y Wasmer . [8] [13]
navegadores web
En noviembre de 2017, Mozilla declaró soporte "en todos los principales navegadores", [40] después de que WebAssembly se habilitara de forma predeterminada en Edge 16. [41] El soporte incluye navegadores web móviles para iOS y Android. A marzo de 2021[actualizar], El 93% de los navegadores instalados (93% de los navegadores de escritorio y 94% de los navegadores móviles) son compatibles con WebAssembly. [42] Pero para los navegadores más antiguos, Wasm se puede compilar en asm.js mediante un polyfill de JavaScript . [43]
Compiladores
Debido a que los ejecutables de WebAssembly están precompilados, es posible utilizar una variedad de lenguajes de programación para crearlos. [44] Esto se logra mediante la compilación directa en Wasm o mediante la implementación de las correspondientes máquinas virtuales en Wasm. Se han informado alrededor de 40 lenguajes de programación que admiten Wasm como objetivo de compilación. [45]
Emscripten compila C y C ++ en Wasm [33] utilizando Binaryen y LLVM como backend. [46]
A partir de la versión 8, un Clang independiente puede compilar C y C ++ en Wasm. [47]
Su objetivo inicial es soportar la compilación desde C y C ++ , [48] aunque también está surgiendo el soporte para otros lenguajes fuente como Rust , lenguajes .NET [49] [50] [45] y AssemblyScript [51] (tipo TypeScript ) . Después del lanzamiento de MVP, hay planes para admitir subprocesos múltiples y recolección de basura [52] [53] lo que haría de WebAssembly un destino de compilación para lenguajes de programación recolectados de basura como C # (compatible con Blazor ), F # (compatible con Bolero [54] con ayuda de Blazor), Python e incluso JavaScript, donde la velocidad de compilación justo a tiempo del navegador se considera demasiado lenta. Varios otros lenguajes tienen algún soporte, incluyendo Python , [55] Java , [56] Julia , [57] [58] [59] Zig , [60] y Ruby , [61] así como Go . [62]
Limitaciones
- En general, WebAssembly no permite la interacción directa con el DOM . Toda la interacción debe fluir a través de la interoperabilidad de JavaScript.
- Multithreading (aunque hay planes para abordar esto).
- Recolección de basura (aunque hay planes para abordar esto).
- Consideraciones de seguridad (discutidas a continuación)
WebAssembly es compatible con computadoras de escritorio y dispositivos móviles, pero en la última, en la práctica (para asignaciones de memoria no pequeñas, como con el motor de juego de Unity ), existen "graves limitaciones que hacen que muchas aplicaciones no puedan 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 ". [63]
Todas las implementaciones (navegadores web) permiten WebAssembly si no se especifica Content-Security-Policy, o si se usa "unsafe-eval", pero por lo demás, los principales navegadores web se comportan de manera diferente. [64] En la práctica, WebAssembly no se puede utilizar en Chrome sin "unsafe-eval", [65] [66] mientras esté disponible una solución de subproceso de trabajo. [67]
Consideraciones de Seguridad
En junio de 2018, un investigador de seguridad presentó la posibilidad de usar WebAssembly para eludir las mitigaciones del navegador para las vulnerabilidades de seguridad de Spectre y Meltdown una vez que se agrega el soporte para subprocesos con memoria compartida. Debido a esta preocupación, los desarrolladores de WebAssembly pusieron la función en espera. [68] [69] [70] Sin embargo, para explorar estas futuras extensiones de idioma, Google Chrome agregó soporte experimental para la propuesta de hilo de WebAssembly en octubre de 2018. [71]
WebAssembly ha sido criticado por permitir una mayor facilidad para ocultar la evidencia para los creadores de malware , estafadores y atacantes de phishing ; WebAssembly solo está presente en la máquina del usuario en su forma compilada, lo que "[dificulta la detección de malware]". [72] La velocidad y la capacidad de ocultación de WebAssembly han llevado a su uso en la minería de cifrado oculta en el dispositivo del visitante del sitio web. [72] [73] [68] Coinhive , un servicio ahora desaparecido que facilita la minería de criptomonedas en los navegadores de los visitantes del sitio web, afirma que su "minero usa WebAssembly y funciona con aproximadamente el 65% del rendimiento de un minero nativo". [68] Un estudio de junio de 2019 de la Technische Universität Braunschweig analizó el uso de WebAssembly en el millón de sitios web principales de Alexa y descubrió que el uso predominante era para la minería criptográfica maliciosa, y que el malware representaba más de la mitad de los sitios web que utilizan WebAssembly estudiados. . [74] [75] Un estudio de abril de 2021 de la Universität Stuttgart encontró que desde entonces la minería de criptomonedas ha sido marginada, cayendo por debajo del 1% de todos los módulos de WebAssembly recopilados de una amplia gama de fuentes, incluyendo también el millón de sitios web principales de Alexa. [76]
La capacidad de ofuscar eficazmente grandes cantidades de código también se puede utilizar para deshabilitar el bloqueo de anuncios y las herramientas de privacidad que impiden el seguimiento web como Privacy Badger .
Como WebAssembly solo admite el flujo de control estructurado , se adapta a las técnicas de verificación de seguridad, incluida la ejecución simbólica . Los esfuerzos actuales en esta dirección incluyen el motor de ejecución simbólica Manticore. [77]
WASI
WebAssembly System Interface (WASI) es una interfaz simple ( ABI y API ) diseñada por Mozilla destinada a ser portátil a cualquier plataforma. [78] Proporciona características similares a POSIX como E / S de archivos restringidas por seguridad basada en capacidades . [79] [80] También hay algunas otras ABI / API propuestas. [81] [82]
WASI está influenciado por CloudABI y Capsicum .
Solomon Hykes, cofundador de Docker , escribió en 2019: "Si WASM + WASI existiera en 2008, no habríamos necesitado crear Docker. Eso es lo importante que es. WebAssembly en el servidor es el futuro de la informática". [83] Wasmer, disponible en la versión 1.0, proporciona "contenedorización de software, creamos binarios universales que funcionan en cualquier lugar sin modificaciones, incluidos sistemas operativos como Linux, macOS, Windows y navegadores web. Wasm coloca automáticamente las aplicaciones en sandbox de forma predeterminada para una ejecución segura". [83]
Especificación
Entorno de acogida
El estándar general proporciona especificaciones básicas para la API de JavaScript y detalles sobre la incrustación. [4]
Máquina virtual
El código Wasm (código binario, es decir, código de bytes) está diseñado para ejecutarse en una máquina de pila virtual (VM) portátil . [84] La VM está diseñada para ser más rápida de analizar y ejecutar que JavaScript y para tener una representación de código compacta. [48] Una funcionalidad externa (como llamadas al sistema ) que puede esperar el código binario de Wasm no está estipulada por el estándar. Más bien, proporciona una forma de ofrecer interfaces a través de módulos mediante el entorno host en el que se ejecuta la implementación de la VM. [85] [8]
Programa Wasm
Un programa Wasm está diseñado para ser un módulo separado que contiene colecciones de varios valores definidos por Wasm y definiciones de tipo de programa. Estos se expresan en formato binario o textual (ver más abajo) y ambos tienen una estructura común. [86]
Conjunto de instrucciones
El estándar central para el formato binario de un programa Wasm define una arquitectura de conjunto de instrucciones (ISA) que consta de codificaciones binarias específicas de tipos de operaciones que son ejecutadas por la VM (sin especificar cómo deben ejecutarse exactamente). [87] La lista de instrucciones incluye instrucciones de almacenamiento / carga de memoria estándar, numéricas, paramétricas, de control de tipos de instrucciones de flujo e instrucciones de variables específicas de Wasm. [88]
El número de códigos de operación utilizados en el estándar original (MVP) fue un poco menos de 200 de los 256 códigos de operación posibles. Las versiones posteriores de WebAssembly empujaron el número de códigos de operación un poco más de 200. La propuesta SIMD de WebAssembly (para procesamiento paralelo) introduce un prefijo de código de operación alternativo (0xfd) para SIMD de 128 bits . La concatenación del prefijo SIMD, más un código de operación que es válido después del prefijo SIMD, forma un código de operación SIMD. Los códigos de operación SIMD traen 236 instrucciones adicionales para la capacidad SIMD de "producto mínimo viable" (MVP) (para un total de alrededor de 436 instrucciones). [89] [90] Esas instrucciones, los "códigos de operación finalizados" [91] se implementan en el V8 de Google (en Google Chrome) y en el motor correspondiente en Mozilla Firefox (pero no están habilitados en las versiones estables de los navegadores web), [92 ] y también hay una propuesta adicional de instrucciones para el "post MVP de SIMD" posterior, y también hay una propuesta separada de "simd relajado" sobre la mesa. [93]
Estos códigos de operación SIMD también son portátiles y se traducen a conjuntos de instrucciones nativos como x64 y ARM. Por el contrario, ni JVM de Java (ni CIL ) son compatibles con SIMD, en su nivel de código de operación (mientras que ambos proporcionan una aceleración de SIMD paralela práctica), es decir, en el estándar, pero hay una extensión disponible que agrega elementos intrínsecos para SIMD x64, [94] que no ' t ser portátil, es decir, no utilizable en ARM o teléfonos inteligentes. Los teléfonos inteligentes pueden admitir SIMD llamando al código de ensamblaje con SIMD, y C # tiene un soporte similar.
Representación de código
En marzo de 2017, WebAssembly Community Group alcanzó un consenso sobre el formato binario inicial (MVP), la API de JavaScript y el intérprete de referencia. [95] Define un formato binario WebAssembly ( .wasm
), que no está diseñado para ser utilizado por humanos, así como un formato de texto WebAssembly legible por humanos ( .wat
) que se asemeja a un cruce entre expresiones S y lenguajes ensambladores tradicionales.
La siguiente tabla 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 .wat formato de texto (una representación textual legible por humanos de WebAssembly) y en .wasm formato binario (la prima de código de bytes , a continuación se expresa en hexadecimal ), que es ejecutado por un entorno de navegador web o de tiempo de ejecución que soporta WebAssembly.
Código fuente C | WebAssembly formato de texto .wat | WebAssembly .wasm formato binario |
---|---|---|
int factorial ( int n ) { if ( n == 0 ) return 1 ; si no devuelve n * factorial ( n -1 ); } | (func (param i64) (resultado i64) local.get 0 i64.eqz si (resultado i64) i64.const 1 demás local.get 0 local.get 0 i64.const 1 i64.sub llamar 0 i64.mul final) | 00 61 73 6D 01 00 00 0001 00 01 60 01 73 01 73 0603 00 01 00 020A 00 0100 0020 005004 7E42 010520 0020 0042 017D10 007E0B0B 15 17 |
Todas las constantes enteras se codifican mediante una codificación LEB128 de longitud variable y que ahorra espacio . [96]
El formato de texto está escrito WebAssembly más canónicamente en un formato plegado usando S-expresiones . Para instrucciones y expresiones, este formato es puramente sintáctico y no tiene diferencias de comportamiento con el formato lineal. [97] A través wasm2wat
, el código anterior se descompila en:
(módulo (escriba $ t0 (func (param i64) (resultado i64))) (func $ f0 (tipo $ t0) (param $ 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í (luego (i64.const 1)) (demás (i64.mul (local.get $ p0) (llame a $ f0; el nombre $ f0 es el mismo que 0 aquí (i64.sub (local.get $ p0) (i64.const 1))))))))
Tenga en cuenta que el compilador genera implícitamente un módulo. En realidad, 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 type
emitida por el descompilador. [98] Se puede acceder en línea al compilador y al descompilador. [99]
Literatura
- Haas, Andreas; Rossberg, Andreas; Schuff, Derek L .; Titzer, Ben L .; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF; Holman, Michael (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 . Asociación de Maquinaria de Computación: 185-200. doi : 10.1145 / 3062341.3062363 . ISBN 9781450349888.
- Watt, Conrad (2018). "Mecanización y verificación de la especificación de WebAssembly" (PDF) . Conferencia Internacional ACM SIGPLAN sobre Programas y Pruebas Certificados . ACM. 7 : 53–65. doi : 10.1145 / 3167082 . ISBN 9781450355865. S2CID 9401691 .
Notas
- ^ Según la documentación oficial, el SDK de Emscripten se puede utilizar para crear
.wasm
archivos que luego se pueden ejecutar en un navegador web. [14] [15] [16] Aunque Emscripten puede consumir varios lenguajes al usar Clang , pueden surgir algunos problemas. [17]
Referencias
- ^ "WebAssembly / design / Semantics.md" . GitHub . Consultado el 23 de febrero de 2021 .
El código de WebAssembly puede considerarse una máquina de pila estructurada ; una máquina en la que la mayoría de los cálculos utilizan una pila de valores, pero el flujo de control se expresa en construcciones estructuradas como bloques, si y bucles. En la práctica, las implementaciones no necesitan mantener una pila de valores reales, ni estructuras de datos reales para el control; sólo necesitan comportarse como si lo hicieran.
- ^ "Introducción - WebAssembly 1.0" . webassembly.github.io . Consultado el 18 de junio de 2019 .
WebAssembly es un estándar abierto ...
- ^ "Introducción - WebAssembly 1.0" . webassembly.github.io . Consultado el 18 de junio de 2019 .
WebAssembly es un ... formato de código
- ^ a b "Convenciones - WebAssembly 1.0" . webassembly.github.io . Consultado 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 asignan a una estructura común.
- ^ "Introducción - WebAssembly 1.0" . webassembly.github.io . Consultado 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 ellos definirá una interfaz de programación de aplicaciones (API) WebAssembly adecuada para un entorno determinado.
- ^ "Introducción - WebAssembly 1.1" . webassembly.github.io . Consultado el 19 de febrero de 2021 .
Su objetivo principal es habilitar 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 puede emplearse en otros entornos.
- ^ 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" . Avisos SIGPLAN . 52 (6): 185–200. doi : 10.1145 / 3140587.3062363 . ISSN 0362-1340 .
Si bien la Web es la motivación principal 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 las implementaciones independientes estén disponibles en el futuro.
- ^ a b c "Fuera de la web: binarios independientes de WebAssembly usando Emscripten · V8" . v8.dev . Consultado el 28 de julio de 2020 .
- ^ "Especificación de WebAssembly - WebAssembly 1.1" . webassembly.github.io . Consultado el 22 de marzo de 2021 .
- ^ "Interfaz JavaScript de WebAssembly" . www.w3.org . Consultado el 24 de junio de 2020 .
- ^ Consorcio Mundial de la red. "Especificación del núcleo de WebAssembly" . Consorcio World Wide Web (W3) . Consultado el 9 de diciembre de 2019 .
- ^ Couriol, Bruno. "WebAssembly 1.0 se convierte en una recomendación del W3C y el cuarto idioma para ejecutarse de forma nativa en los navegadores" . infoq.com . Consultado el 9 de diciembre de 2019 .
- ^ a b c "Wasmer - El tiempo de ejecución de Universal WebAssembly" . wasmer.io . Consultado el 19 de febrero de 2021 .
Compile todo en WebAssembly. Ejecútelo en cualquier sistema operativo o incorpórelo en otros idiomas.
- ^ "Guía del desarrollador - WebAssembly" . webassembly.org . Consultado el 10 de junio de 2019 .
- ^ "Compilación de un nuevo módulo C / C ++ para WebAssembly" . Documentos web de MDN . Consultado el 10 de junio de 2019 .
- ^ "Construcción de WebAssembly - documentación de Emscripten 1.38.33" . emscripten.org . Consultado el 10 de junio de 2019 .
- ^ "Emscripting de una biblioteca C a Wasm | Web" . Desarrolladores de Google . Consultado el 10 de junio de 2019 .
- ^ "stdweb - óxido" . docs.rs . Consultado el 5 de junio de 2019 .
El objetivo de esta caja es proporcionar enlaces de Rust a las API web y permitir un alto grado de interoperabilidad entre Rust y JavaScript.
- ^ "web_sys - Óxido" . docs.rs . Consultado el 5 de junio de 2019 .
Enlaces de API sin formato para API web. Esta es una caja generada por procedimientos desde el navegador WebIDL que proporciona un enlace a todas las API que el navegador proporciona en la web.
- ^ "js_sys - Óxido" . docs.rs . Consultado el 5 de junio de 2019 .
Enlaces a objetos integrados estándar de JavaScript, incluidos sus métodos y propiedades.
- ^ a b "La nueva alianza Bytecode trae la seguridad, la ubicuidad y la interoperabilidad de la Web al mundo de la informática generalizada" . Mozilla . 12 de noviembre de 2019 . Consultado el 27 de mayo de 2019 .
- ^ bytecodealliance / wasm-micro-runtime , Bytecode Alliance, 19 de febrero de 2021 , consultado el 19 de febrero de 2021
- ^ "Wasmtime - un tiempo de ejecución pequeño y eficiente para WebAssembly y WASI" . wasmtime.dev . Consultado el 18 de diciembre de 2020 .
- ^ Bright, Peter (18 de junio de 2015). "La Web está obteniendo su código de bytes: WebAssembly" . Ars Technica . Condé Nast .
- ^ "Error de lanzamiento" . GitHub / WebAssembly / design . 11 de junio de 2015.
- ^ Wagner, Luke (14 de marzo de 2016). "Un hito de WebAssembly: soporte experimental en varios navegadores" . Hacks de Mozilla .
- ^ Thompson, Seth (15 de marzo de 2016). "Soporte experimental para WebAssembly en V8" . Blog de V8 .
- ^ Zhu, Limin (15 de marzo de 2016). "Vista previa de experimentos de WebAssembly en Microsoft Edge" . Blog de desarrollo de Microsoft Edge .
- ^ 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 . Consultado el 24 de diciembre de 2017 .
- ^ Avram, Abel (31 de mayo de 2017). "Google eliminará el soporte para PNaCl" . InfoQ . Consultado el 22 de diciembre de 2017 .
- ^ "WebAssembly: un formato binario para la web" . ②ality: JavaScript y más . 18 de junio de 2015.
- ^ "Mirando al sol: Dalvik vs. ASM.js vs. Native" . blog.mozilla.org . Consultado el 7 de diciembre de 2019 .
Incluso descartando la única puntuación en la que asm.js funcionó mejor, se ejecuta a alrededor del 70% de la velocidad del código C ++ nativo.
- ^ a b Krill, Paul (6 de marzo de 2017). "WebAssembly está ahora listo para que lo utilicen los navegadores" . InfoWorld . Consultado el 23 de diciembre de 2017 .
- ^ "Primeros borradores públicos de trabajo de WebAssembly" . W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
- ^ "Especificación del núcleo de WebAssembly" . W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
- ^ "Interfaz JavaScript de WebAssembly" . W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
- ^ "API web de WebAssembly" . W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
- ^ "Embeddings no web" . WebAssembly . Consultado el 15 de mayo de 2019 .
- ^ "Embeddings no web" . GitHub / WebAssembly . Consultado el 15 de mayo de 2019 .
- ^ "Soporte de WebAssembly ahora disponible en todos los principales navegadores" . El blog de Mozilla . Consultado el 21 de noviembre de 2017 .
- ^ "Presentamos nuevas optimizaciones de JavaScript, WebAssembly, SharedArrayBuffer y Atomics en EdgeHTML 16" . Blog de desarrollo de Microsoft Edge . 31 de octubre de 2017 . Consultado el 21 de noviembre de 2017 .
- ^ "WebAssembly" . Puedo usar . Consultado el 22 de marzo de 2020 .
- ^ Bright, Peter (18 de junio de 2015). "La Web está obteniendo su código de bytes: WebAssembly" . Ars Technica . Consultado el 23 de diciembre de 2017 .
- ^ Ball, Kevin (26 de junio de 2018). "Cómo WebAssembly está acelerando el futuro del desarrollo web" . Archivado desde el original el 12 de febrero de 2019 . Consultado el 22 de octubre de 2018 .
- ^ a b "Impresionantes lenguajes de ensamblaje web" . 26 de junio de 2018. Archivado desde el original el 12 de febrero de 2019 . Consultado el 12 de febrero de 2019 .
- ^ Zakai, Alon [@kripken] (21 de octubre de 2019). "¡Emscripten ha cambiado al backend wasm de LLVM ascendente de forma predeterminada! / Detalles: https: //groups.google.com/forum/#! Topic / emscripten-discus / NpxVAOirSl4…" (Tweet) . Consultado el 22 de octubre de 2019 , a través de Twitter .
- ^ "Notas de la versión LLVM 8.0.0 - Documentación de LLVM 8" . releases.llvm.org . Consultado el 22 de octubre de 2019 .
- ^ a b "Objetivos de alto nivel de WebAssembly" . GitHub / WebAssembly / design . 11 de diciembre de 2015.
- ^ Krill, Paul (29 de noviembre de 2017). "La compilación directa de WebAssembly llega al lenguaje Rust" . InfoWorld . Consultado el 24 de diciembre de 2017 .
- ^ "Preguntas frecuentes (FAQ) sobre Blazor" . blazor.net . Consultado el 18 de junio de 2018 .
- ^ AssemblyScript / assemblyscript , The AssemblyScript Project, 9 de septiembre de 2020 , consultado el 9 de septiembre de 2020
- ^ Krill, Paul (26 de octubre de 2017). "Qué sigue para WebAssembly: GC, subprocesos, depuración" . TechWorld . Consultado el 24 de diciembre de 2017 .
- ^ "🛤 Recolección de basura · Edición # 16 · WebAssembly / propuestas" . GitHub . Consultado el 25 de julio de 2019 .
- ^ "Bolero: F # en WebAssembly" . fsbolero.io . Consultado el 25 de julio de 2019 .
- ^ "Pyodide: Llevando la pila científica de Python al navegador - Mozilla Hacks - el blog del desarrollador web" . Mozilla Hacks: el blog para desarrolladores web . Consultado el 9 de septiembre de 2020 .
- ^ "Mozilla intenta hacer Java como debería haber sido, con una especificación WASI para todos los dispositivos, computadoras y sistemas operativos" . www.theregister.com . Consultado el 6 de octubre de 2020 .
- ^ "Julia en el navegador" . nextjournal.com . Consultado el 9 de abril de 2019 .
- ^ "Plataforma WebAssembly por tshort · Pull Request # 2 · JuliaPackaging / Yggdrasil" . GitHub . Consultado el 9 de abril de 2019 .
- ^ Fischer, Keno (22 de julio de 2019), GitHub - Keno / julia-wasm: Running julia on wasm. , consultado el 25 de julio de 2019
- ^ "Documentación - El lenguaje de programación Zig" . ziglang.org .
- ^ "MRuby en su navegador" . ruby.dj . Consultado el 25 de julio de 2019 .
- ^ "golang / go" . GitHub . Consultado el 19 de febrero de 2021 .
- ^ "Wasm necesita una mejor historia de gestión de memoria · Número 1397 · WebAssembly / diseño" . GitHub . Consultado el 15 de febrero de 2021 .
- ^ "WebAssembly / content-security-policy" . GitHub . Consultado el 17 de febrero de 2021 .
- ^ "948834 - cromo - Un proyecto de código abierto para ayudar a hacer avanzar la web. - Monorraíl" . bugs.chromium.org . Consultado el 17 de febrero de 2021 .
- ^ "No hay forma de utilizar WebAssembly en Chrome sin 'unsafe-eval' · Problema n. ° 7 · WebAssembly / content-security-policy" . GitHub . Consultado el 17 de febrero de 2021 .
- ^ "No hay forma de utilizar WebAssembly en Chrome sin 'unsafe-eval' · Problema n. ° 7 · WebAssembly / content-security-policy" . GitHub . Consultado el 17 de febrero de 2021 .
- ^ a b c Neumann, Robert; Toro, Abel (19 de abril de 2018). "Minería en el navegador: Coinhive y WebAssembly" . Forcepoint . Consultado el 8 de junio de 2019 .
- ^ Cimpanu, Catalin (24 de junio de 2018). "Los cambios en WebAssembly podrían hacer que los parches del navegador Meltdown y Spectre sean inútiles" . Ordenador que suena . Consultado 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 de Spectre en línea" . Tech Republic . Consultado 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 de subprocesos múltiples" . Packt Pub . Consultado el 9 de junio de 2019 .
- ^ a b Lonkar, Aishwarya; Chandrayan, Siddhesh (octubre de 2018). "El lado oscuro de WebAssembly" . Boletín de virus . Consultado el 8 de junio de 2019 .
- ^ Segura, Jérôme (29 de noviembre de 2017). "Criptominería persistente drive-by llegando a un navegador cerca de usted" . Malwarebytes . Consultado el 8 de junio de 2019 .
- ^ "Estimaciones de estudios recientes que el 50% de los sitios web que utilizan WebAssembly lo aplican con fines maliciosos" . InfoQ . Consultado el 3 de noviembre de 2019 .
- ^ Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (junio de 2019). "New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild (archivado el 21 de octubre de 2019)". Detección de intrusiones y malware, y evaluación de vulnerabilidades (PDF) . Apuntes de conferencias en informática. 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. Consultado el 4 de noviembre de 2019 . Diapositivas (PDF)
- ^ Aaron Hilbig, Daniel Lehmann y Michael Pradel (abril de 2021). "Un estudio empírico de los binarios de WebAssembly del mundo real: seguridad, idiomas, casos de uso". (Archivado en abril de 2021) https://software-lab.org/publications/www2021.pdf
- ^ "Ejecución simbólica de WebAssembly en Manticore" . 31 de enero de 2020 . Consultado el 10 de febrero de 2020 .
- ^ "WebAssembly System Interface Repo" . GitHub / WebAssembly . 10 de febrero de 2020.
- ^ "Información adicional sobre capacidades" . GitHub . bytecodealliance.
- ^ "Estandarización de WASI: una interfaz de sistema para ejecutar WebAssembly fuera de la web - Mozilla Hacks - el blog del desarrollador web" . Mozilla Hacks: el blog para desarrolladores web .
- ^ "Repositorio de referencia-sysroot" . GitHub / WebAssembly . 12 de enero de 2020.
- ^ "wasm-c-api Repo" . GitHub / WebAssembly . 3 de febrero de 2020.
- ^ a b "El tiempo de ejecución de WebAssembly" Wasmer "está generalmente disponible" . InfoQ . Consultado el 19 de febrero de 2021 .
- ^ "Justificación del diseño" . GitHub / WebAssembly / design . 1 de octubre de 2016.
- ^ "Portabilidad - WebAssembly" . webassembly.org . Consultado el 28 de julio de 2020 .
- ^ "Convenciones - WebAssembly 1.0" . webassembly.github.io . Consultado el 12 de noviembre de 2019 .
- ^ "Introducción - WebAssembly 1.0" . webassembly.github.io . Consultado el 17 de mayo de 2019 .
- ^ "Instrucciones - WebAssembly 1.0" . webassembly.github.io . Consultado el 12 de noviembre de 2019 .
- ^ Lively, Thomas (19 de febrero de 2021) [Pull Request abrió el 2021-02-05]. "Códigos de operación finales por tlively · Pull Request # 452 · WebAssembly / simd · GitHub" . Alianza de Bytecode . Consultado el 12 de mayo de 2021 , a través de GitHub .
- ^ Delendik, Yury (19 de febrero de 2021) [Cambios de SIMD confirmados el 19 de febrero de 2021]. "Archivo wasm-tools / expr.rs en b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance / wasm-tools · GitHub" . Alianza de Bytecode . Consultado el 12 de mayo de 2021 , a través de GitHub .
- ^ "Actualizar el intérprete y el texto con los códigos de operación finalizados por ngzhian · Pull Request # 486 · WebAssembly / simd" . GitHub . Consultado el 14 de mayo de 2021 .
- ^ "WebAssembly / simd" . GitHub . Consultado el 14 de mayo de 2021 .
- ^ WebAssembly / Relax-Simd , WebAssembly, 3 de mayo de 2021 , consultado el 14 de mayo de 2021
- ^ "Cómo hicimos la JVM 40 veces más rápida" . astojanov.github.io . Consultado el 17 de febrero de 2021 .
- ^ "Hoja de ruta" . WebAssembly . Marzo de 2017.
- ^ WebAssembly Community Group (enero de 2020). "WebAssembly Specification Release 1.0" . Consultado el 13 de enero de 2020 .
- ^ "Instrucciones plegadas" . GitHub . / WebAssembly / especificaciones
- ^ "Módulos (binarios)" . WebAssembly 1.0 .
- ^ "Demostraciones de WebAssembly Binary Toolkit (wabt)" . webassembly.github.io .
Este artículo incorpora texto de un trabajo de contenido gratuito . Con licencia de Apache License 2.0 Declaración de licencia / permiso en Wikimedia Commons . Texto tomado de Text Format , jfbastien; rossberg-cromo; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. Montaje / diseño web.
enlaces externos
- Página web oficial
- Grupo Comunitario W3C
- Diseño WebAssembly
- "WebAssembly" , MDN Web Docs - con información sobre compatibilidad y especificaciones del navegador (API de JavaScript de WebAssembly)