stringtranslate.com

Asamblea web

WebAssembly (a veces abreviado Wasm ) define un formato de código binario portátil y un formato de texto correspondiente para programas ejecutables [2], así como interfaces de software para facilitar las interacciones entre dichos programas y su entorno anfitrión. [3] [4] [5] [6]

El objetivo principal de WebAssembly es habilitar aplicaciones de alto rendimiento en páginas 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". [7] Es un estándar abierto [8] [9] y tiene como objetivo admitir cualquier idioma en cualquier sistema operativo, [10] y en la práctica todos los idiomas más populares ya tienen al menos algún nivel de soporte.

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

Historia

WebAssembly recibe su nombre para evocar el concepto de lenguaje ensamblador , término que data de la década de 1950. El nombre sugiere llevar la programación similar a un ensamblador a la Web , donde será ejecutada en el lado del cliente : por la computadora del usuario del sitio web a través del navegador web del usuario . Para lograr esto, 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 la ejecución de Angry Bots de Unity en Firefox , [18] Google Chrome , [19] y Microsoft Edge . [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 funciones de asm.js. [23] La tecnología asm.js ya proporciona velocidades de ejecución de código casi nativas [24] [25] y puede considerarse una alternativa viable para navegadores que no admiten WebAssembly o lo tienen deshabilitado por razones de seguridad.

En marzo de 2017 se declaró finalizado el diseño del producto mínimo viable (MVP) y finalizó la fase de vista previa. [26] 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. [27] [28] [29] [30]

En junio de 2019, se lanzó Chrome 75 con los subprocesos de WebAssembly habilitados de forma predeterminada. [31]

Desde abril de 2022, WebAssembly 2.0 se encuentra en estado de borrador, [32] [33] , lo que agrega muchas instrucciones relacionadas con SIMD y un nuevo tipo de datos v128, la capacidad de que las funciones devuelvan múltiples valores e inicialización/copia de memoria masiva.

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 eso, en contextos más generalizados. [34] [35] Dado que los entornos de ejecución (RE) de WebAssembly son máquinas de pila virtuales de bajo nivel (similares a JVM o Flash VM ) que pueden integrarse en aplicaciones host, algunos de ellos han encontrado una manera de crear entornos de ejecución independientes como Wasmtime  y Wasmer  . [9] [10]

navegadores web

En noviembre de 2017, Mozilla declaró soporte "en todos los navegadores principales", [36] después de que WebAssembly se habilitara de forma predeterminada en Edge 16. [37] El soporte incluye navegadores web móviles para iOS y Android. En marzo de 2024, el 99% de los navegadores web rastreados son compatibles con WebAssembly (versión 1.0), [38] que es más que su predecesor asm.js , que no es compatible, por ejemplo, con el navegador web Safari. Para algunas extensiones, a partir del borrador del estándar 2.0, el soporte puede ser menor, pero aún así es posible que más del 90% de los navegadores web ya lo admitan, por ejemplo, para la extensión de tipos de referencia. [39]

Compiladores

Las implementaciones de WebAssembly generalmente usan compilación anticipada (AOT) o justo a tiempo (JIT), pero también pueden usar un intérprete . Si bien las primeras implementaciones llegaron a los navegadores web , también existen implementaciones que no son de navegador para uso de propósito general, incluidas Wasmer, [10] Wasmtime [40] o WAMR, [16] wasm3, WAVM y muchas otras. [41]

Debido a que los ejecutables de WebAssembly están precompilados, es posible utilizar una variedad de lenguajes de programación para crearlos. [42] Esto se logra mediante la compilación directa en Wasm o mediante la implementación de las máquinas virtuales correspondientes en Wasm. Se ha informado que alrededor de 40 lenguajes de programación admiten Wasm como objetivo de compilación. [43]

Emscripten compila C y C++ en Wasm [26] utilizando Binaryen y LLVM como backend. [44] 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 entorno limitado que el código JavaScript. [nota 1] Emscripten proporciona enlaces para varias interfaces de entorno de uso común como WebGL .

A partir de la versión 8, un Clang independiente puede compilar C y C++ en Wasm. [49] Su objetivo inicial era admitir la compilación desde C y C++ , [50] aunque admite otros lenguajes fuente como Rust , lenguajes .NET [51] [52] [43] y AssemblyScript [53] ( tipo TypeScript ) también está surgiendo.

Después del lanzamiento de MVP, WebAssembly agregó soporte para subprocesos múltiples y recolección de basura [54] [55] , lo que permitió la compilación de lenguajes de programación con recolección de basura como C# (compatible con Blazor ), F# (compatible con Bolero [56] 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 cierto soporte, incluidos Python , [57] Julia , [58] [59] [60] y Ruby . [61]

Varios sistemas pueden compilar Java y otros lenguajes de código de bytes en JavaScript y WebAssembly. Estos incluyen CheerpJ, [62] JWebAssembly [63] y TeaVM. [64] Todos estos toman archivos .class de código de bytes de Java como entrada, lo que permite utilizar también otros lenguajes JVM como Groovy y Scala . Kotlin admite WebAssembly directamente. [65] [66]

Limitaciones

WebAssembly no permite la interacción directa con el DOM ; debe fluir a través de JavaScript . [nota 2]

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

Para las asignaciones de memoria intensiva en WebAssembly, existen "graves limitaciones que hacen que muchas aplicaciones no se puedan implementar 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 recursos específicos de Chrome". soluciones alternativas, ni en Safari en iOS." [70]

Todos los navegadores principales permiten WebAssembly si no se especifica la Política de seguridad de contenido o si se utiliza "evaluación insegura", pero por lo demás se comportan de manera diferente. [71] Chrome requiere una "evaluación insegura", [72] [73] aunque un hilo de trabajo puede ser una solución alternativa. [73]

En 2022, la nueva empresa llamada Zaplib resumió en un blog por qué estaban cerrando. [74] Su objetivo había sido aumentar significativamente el rendimiento de las aplicaciones web existentes transfiriéndolas gradualmente a Rust /Wasm. Sin embargo, migrar el simulador de un cliente desde JavaScript solo produjo una mejora del 5%. [74] Con respecto a Figma , afirmaron: "tras una inspección más cercana, parece que su uso de Wasm se debe más a accidentes históricos (querer construir en C++ para proteger su aplicación nativa) que a necesidades críticas de rendimiento. Los archivos Figma se procesan en C++/Wasm, y esto probablemente sea una gran aceleración, pero la mayor parte de la magia del rendimiento de Figma se debe a su renderizador WebGL ". [74]

Consideraciones de Seguridad

En junio de 2018, un investigador de seguridad presentó la posibilidad de utilizar WebAssembly para eludir las mitigaciones del navegador para las vulnerabilidades de seguridad Spectre y Meltdown una vez que se agregue soporte para subprocesos con memoria compartida. Debido a esta preocupación, los desarrolladores de WebAssembly suspendieron la función. [75] [76] [77] Sin embargo, para explorar estas futuras extensiones de lenguaje, Google Chrome agregó soporte experimental para la propuesta de hilo WebAssembly en octubre de 2018. [78]

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 sólo en su forma compilada, lo que "[dificulta la detección de malware]". [79] La velocidad y la capacidad de ocultación de WebAssembly han llevado a su uso en la minería criptográfica oculta en el dispositivo del visitante del sitio web. [79] [80] [75] 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 se ejecuta con aproximadamente el 65% del rendimiento de un minero nativo". [75] 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 encontró 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 usaban WebAssembly estudiados. . [81] [82] Un estudio de abril de 2021 de la Universität Stuttgart encontró que desde entonces la minería de criptomonedas ha sido marginada, cayendo a menos del 1% de todos los módulos WebAssembly recopilados de una amplia gama de fuentes, incluido también el millón de sitios web principales de Alexa. [83]

La capacidad de ofuscar eficazmente grandes cantidades de código también se puede utilizar para evitar el bloqueo de anuncios y las herramientas de privacidad que impiden el seguimiento web como Privacy Badger . [ cita necesaria ]

Como WebAssembly sólo admite flujo de control estructurado , se presta a técnicas de verificación de seguridad, incluida la ejecución simbólica . [84] Los esfuerzos actuales en esta dirección incluyen el motor de ejecución simbólica Manticore. [85]

WASI

WebAssembly System Interface (WASI) es una interfaz simple ( ABI y API ) diseñada por Mozilla destinada a ser portátil a cualquier plataforma. [86] Proporciona funciones similares a POSIX , como E/S de archivos restringida por seguridad basada en capacidades . [87] [88] También hay algunas otras ABI/API propuestas. [89] [90]

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. Así de importante es. WebAssembly en el servidor es el futuro de la informática". [91] 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 protege automáticamente las aplicaciones de forma predeterminada para una ejecución segura". [91]

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, código de bytes) está diseñado para ejecutarse en una máquina de pila virtual (VM) portátil . [92] 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. [50] Cualquier funcionalidad externa (como syscalls ) que pueda esperarse del código binario Wasm no está estipulada por el estándar. Más bien proporciona una forma de ofrecer interfaz a través de módulos mediante el entorno host en el que se ejecuta la implementación de la VM. [93] [9]

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 tipos de programas. Estos se expresan en formato binario o textual (ver más abajo) y ambos tienen una estructura común. [94] Dicho módulo puede proporcionar una función de inicio que se ejecuta al crear una instancia de un binario wasm.

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 ejecuta la VM (sin especificar cómo deben ejecutarse exactamente). [95] La lista de instrucciones incluye instrucciones estándar de carga/almacenamiento de memoria, tipos de instrucciones numéricas, paramétricas, de control de flujo e instrucciones variables específicas de Wasm. [96]

La cantidad 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 aumentaron 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 aportan 236 instrucciones adicionales para la capacidad SIMD de "producto mínimo viable" (MVP) (para un total de alrededor de 436 instrucciones). [97] [98] Esas instrucciones, los "códigos de operación finalizados" [99] están habilitados de forma predeterminada en V8 de Google (en Google Chrome), el motor SpiderMonkey en Mozilla Firefox y el motor JavaScriptCore en Safari de Apple [100] y hay También hay una propuesta adicional de instrucciones para "post SIMD MVP" posterior, y también hay una propuesta separada de "simd relajado" sobre la mesa. [101]

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 la JVM de Java ni el CIL soportan SIMD, en su nivel de código de operación , es decir, en el estándar; Ambos tienen algunas API paralelas que proporcionan aceleración SIMD. Existe una extensión para Java que agrega elementos intrínsecos para SIMD x64, [102] que no es portátil, es decir, no se puede utilizar en ARM o teléfonos inteligentes. Los teléfonos inteligentes pueden admitir SIMD llamando al código ensamblador con SIMD, y C# tiene un soporte similar.

Representación de código

En marzo de 2017, el grupo comunitario WebAssembly llegó a un consenso sobre el formato binario inicial (MVP), la API de JavaScript y el intérprete de referencia. [103] 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 correspondiente código WebAssembly después de la compilación, mostrado tanto en formato de texto .wat (una representación textual legible por humanos de WebAssembly) como en formato binario .wasm (el código de bytes sin formato , expresado a continuación en hexadecimal ), que se ejecuta mediante un navegador web o un entorno de ejecución que admita WebAssembly.

Todas las constantes enteras se codifican utilizando una codificación LEB128 de longitud variable y que ahorra espacio . [104]

El formato de texto WebAssembly se escribe más canónicamente en un formato plegado utilizando expresiones S. Para instrucciones y expresiones, este formato es puramente sintáctico y no tiene diferencias de comportamiento con el formato lineal. [105] Hasta wasm2wat, el código anterior se descompila en:

( módulo  ( escriba  $t0  ( func  ( parámetro  i64 )  ( resultado  i64 )))  ( func  $f0  ( escriba  $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 ))  ( else  ( 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, se hace referencia a la función mediante una entrada de la tabla de tipos en el binario, por lo tanto, una sección de tipos y la typeemitida por el descompilador. [106] Se puede acceder en línea al compilador y descompilador. [107]

Ver también

Notas

  1. ^ Según la documentación oficial, el SDK de Emscripten se puede utilizar para crear .wasmarchivos que luego se pueden ejecutar en un navegador web. [45] [46] [47] Aunque Emscripten puede consumir varios idiomas cuando usa Clang , pueden surgir algunos problemas. [48]
  2. ^ Es posible que Rust pueda mitigar esto hasta cierto punto con funciones de proxy. [67] [68]

Referencias

  1. ^ "WebAssembly/diseño/Semantics.md". GitHub . Consultado 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, ifs y bucles. En la práctica, las implementaciones no necesitan mantener una pila de valores real, ni estructuras de datos reales para el control; sólo necesitan comportarse como si lo hicieran.
  2. ^ Mozilla. "Comprensión del formato de texto de WebAssembly". Documentos web de MDN . Consultado el 9 de diciembre de 2019 .
  3. ^ "Introducción: WebAssembly 1.0". webassembly.github.io . Consultado el 18 de junio de 2019 . WebAssembly es un estándar abierto...
  4. ^ "Introducción: WebAssembly 1.0". webassembly.github.io . Consultado el 18 de junio de 2019 . WebAssembly es un... formato de código
  5. ^ ab "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.
  6. ^ "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 integració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.
  7. ^ "Introducción: WebAssembly 1.1". webassembly.github.io . 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 puede emplearse en otros entornos.
  8. ^ Haas, Andrés; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Lucas; Zakai, Alon; Bastien, JF (14 de junio de 2017). "Actualizar la Web con WebAssembly". Avisos SIGPLAN . 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 haya implementaciones independientes disponibles.
  9. ^ abc "Fuera de la web: binarios de WebAssembly independientes que utilizan Emscripten · V8". v8.dev . Consultado el 28 de julio de 2020 .
  10. ^ abc "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.
  11. ^ Consorcio World Wide Web. "Especificación principal de WebAssembly". Consorcio World Wide Web (W3) . Consultado el 9 de diciembre de 2019 .
  12. ^ Couriol, Bruno. "WebAssembly 1.0 se convierte en una recomendación del W3C y el cuarto idioma que se ejecuta de forma nativa en los navegadores". infoq.com . Consultado el 9 de diciembre de 2019 .
  13. ^ "Especificación de WebAssembly: WebAssembly 1.1". webassembly.github.io . Consultado el 22 de marzo de 2021 .
  14. ^ "Premio Software de Lenguajes de Programación". www.sigplan.org .
  15. ^ Bright, Peter (18 de junio de 2015). "La Web está obteniendo su código de bytes: WebAssembly". Ars Técnica . Conde Nast .
  16. ^ ab "La nueva Bytecode Alliance lleva 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 .
  17. ^ "Error de inicio". GitHub /WebAssembly/diseño . 11 de junio de 2015.
  18. ^ Wagner, Luke (14 de marzo de 2016). "Un hito de WebAssembly: soporte experimental en varios navegadores". Hacks de Mozilla .
  19. ^ Thompson, Seth (15 de marzo de 2016). "Soporte experimental para WebAssembly en V8". Blog V8 .
  20. ^ Zhu, Limin (15 de marzo de 2016). "Vista previa de experimentos de WebAssembly en Microsoft Edge". Blog de desarrollo de Microsoft Edge .
  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 . Consultado el 24 de diciembre de 2017 .
  22. ^ Avram, Abel (31 de mayo de 2017). "Google eliminará la compatibilidad con PNaCl". InfoQ . Consultado el 22 de diciembre de 2017 .
  23. ^ "WebAssembly: un formato binario para la web". ②alidad: JavaScript y más . 18 de junio de 2015.
  24. ^ "Mirando al sol: Dalvik frente a ASM.js frente a Native". blog.mozilla.org . Agosto 2013 . Consultado el 7 de diciembre de 2019 . Incluso descartando la puntuación en la que asm.js obtuvo mejores resultados, se ejecuta a alrededor del 70% de la velocidad del código C++ nativo.
  25. ^ Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (25 de enero de 2019). No tan rápido: análisis del rendimiento de WebAssembly frente al código nativo. OCLC  1106328738.{{cite book}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace )
  26. ^ ab Krill, Paul (6 de marzo de 2017). "WebAssembly ya está listo para que lo utilicen los navegadores". InfoMundo . Consultado el 23 de diciembre de 2017 .
  27. ^ "Primeros borradores de trabajo público de WebAssembly". W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
  28. ^ "Especificación principal de WebAssembly". W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
  29. ^ "Interfaz JavaScript de WebAssembly". W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
  30. ^ "API web de WebAssembly". W3C. 15 de febrero de 2018 . Consultado el 20 de abril de 2018 .
  31. ^ "Subprocesos basados ​​en trabajadores de WebAssembly: estado de la plataforma Chrome". chromestatus.com . Consultado el 19 de febrero de 2022 .
  32. ^ "Especificación de WebAssembly - WebAssembly 2.0 (borrador del 1 de septiembre de 2022)". webassembly.github.io . Consultado el 9 de septiembre de 2022 .
  33. ^ "Primeros borradores de trabajo públicos de WebAssembly 2.0 | Noticias del W3C". 19 de abril de 2022 . Consultado el 9 de septiembre de 2022 .
  34. ^ "Incrustaciones no web". Asamblea web . Consultado el 15 de mayo de 2019 .
  35. ^ "Incrustaciones no web". GitHub /WebAssembly . Consultado el 15 de mayo de 2019 .
  36. ^ "La compatibilidad con WebAssembly ahora se incluye en todos los principales navegadores". El blog de Mozilla . Consultado el 21 de noviembre de 2017 .
  37. ^ "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 .
  38. ^ "WebAssembly | ¿Puedo usar... tablas de soporte para HTML5, CSS3, etc.?". canIuse.com . Consultado el 1 de marzo de 2024 .
  39. ^ "Tipos de referencia de WebAssembly | ¿Puedo usar... tablas de soporte para HTML5, CSS3, etc.?". caniuse.com . Consultado el 3 de marzo de 2024 .
  40. ^ "Wasmtime: un tiempo de ejecución pequeño y eficiente para WebAssembly y WASI". wasmtime.dev . Consultado el 18 de diciembre de 2020 .
  41. ^ "Hoja de ruta" . Consultado el 7 de diciembre de 2021 .
  42. ^ 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 .
  43. ^ ab "Impresionantes lenguajes WebAssembly". GitHub . 26 de junio de 2018 . Consultado el 15 de febrero de 2022 .
  44. ^ Zakai, Alon [@kripken] (21 de octubre de 2019). "¡Emscripten ha cambiado al backend wasm LLVM ascendente de forma predeterminada! / Detalles: https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4 …" ( Tweet ) . Consultado el 22 de octubre de 2019 - vía Twitter .
  45. ^ "Guía para desarrolladores: WebAssembly". webassembly.org . Consultado el 10 de junio de 2019 .
  46. ^ "Compilación de un nuevo módulo C/C++ para WebAssembly". Documentos web de MDN . Consultado el 10 de junio de 2019 .
  47. ^ "Construcción de WebAssembly: documentación de Emscripten 1.38.33". emscripten.org . Consultado el 10 de junio de 2019 .
  48. ^ "Grabar una biblioteca C en Wasm | Web". Desarrolladores de Google . Consultado el 10 de junio de 2019 .
  49. ^ "Notas de la versión de LLVM 8.0.0: documentación de LLVM 8". lanzamientos.llvm.org . Consultado el 22 de octubre de 2019 .
  50. ^ ab "Objetivos de alto nivel de WebAssembly". GitHub /WebAssembly/diseño . 11 de diciembre de 2015.
  51. ^ Krill, Paul (29 de noviembre de 2017). "La compilación directa de WebAssembly llega al lenguaje Rust". InfoMundo . Consultado el 24 de diciembre de 2017 .
  52. ^ "Preguntas frecuentes (FAQ) sobre Blazor". blazor.net . Consultado el 18 de junio de 2018 .
  53. ^ AssemblyScript/assemblyscript, The AssemblyScript Project, 9 de septiembre de 2020 , consultado el 9 de septiembre de 2020
  54. ^ "Una nueva forma de llevar eficientemente los lenguajes de programación recolectados como basura a WebAssembly · V8". v8.dev . Consultado el 11 de diciembre de 2023 .
  55. ^ "WebAssembly Garbage Collection (WasmGC) ahora está habilitado de forma predeterminada en Chrome | Blog". Chrome para desarrolladores . Consultado el 11 de diciembre de 2023 .
  56. ^ "Bolero: F# en WebAssembly". fsbolero.io . Consultado el 25 de julio de 2019 .
  57. ^ "Pyodide: Llevando la pila científica de Python al navegador - Mozilla Hacks - el blog para desarrolladores web". Mozilla Hacks: el blog para desarrolladores web . Consultado el 9 de septiembre de 2020 .
  58. ^ "Julia en el navegador". nextjournal.com . Consultado el 9 de abril de 2019 .
  59. ^ "Plataforma WebAssembly de tshort · Solicitud de extracción n.º 2 · JuliaPackaging/Yggdrasil". GitHub . Consultado el 9 de abril de 2019 .
  60. ^ Fischer, Keno (22 de julio de 2019), GitHub - Keno/julia-wasm: ejecutando julia en wasm. , recuperado el 25 de julio de 2019
  61. ^ "MRuby en tu navegador". rubí.dj.Consultado el 25 de julio de 2019 .
  62. ^ "Compilador de Java a WebAssembly: CheerpJ" . Consultado el 27 de abril de 2023 .
  63. ^ JWebAssembly, 27 de abril de 2023 - vía GitHub
  64. ^ "TeaVM: descripción general". www.teavm.org . Consultado el 27 de abril de 2023 .
  65. ^ "Llevar Kotlin a la Web" . Consultado el 11 de diciembre de 2023 .
  66. ^ Deleuze, Sébastien (13 de febrero de 2023). "El enorme potencial de Kotlin/Wasm". seb.deleuze.fr . Consultado el 11 de diciembre de 2023 .
  67. ^ "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.
  68. ^ "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.
  69. ^ "El estado de WebAssembly 2023". Lógica de Scott. 18 de octubre de 2023 . Consultado el 14 de marzo de 2024 .
  70. ^ "Wasm necesita una mejor historia de gestión de la memoria · Número 1397 · WebAssembly/design". GitHub . Consultado el 15 de febrero de 2021 .
  71. ^ "WebAssembly/política-de-seguridad-de-contenido". GitHub . Consultado el 17 de febrero de 2021 .
  72. ^ "948834 - chromium - 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 .
  73. ^ ab "No hay forma de utilizar WebAssembly en Chrome sin una 'evaluación insegura' · Problema n.º 7 · WebAssembly/content-security-policy". GitHub . Consultado el 17 de febrero de 2021 .
  74. ^ a b "Zaplib post-mortem". zaplib.com . Abril 2022 . Consultado el 14 de marzo de 2024 .
  75. ^ abc Neumann, Robert; Toro, Abel (19 de abril de 2018). "Minería en el navegador: Coinhive y WebAssembly". Punto de fuerza . Consultado el 8 de junio de 2019 .
  76. ^ Cimpanu, Catalin (24 de junio de 2018). "Los cambios en WebAssembly podrían inutilizar los parches del navegador Meltdown y Spectre". Computadora que suena . Consultado el 8 de junio de 2019 .
  77. ^ Sanders, James (25 de junio de 2018). "Cómo el código WebAssembly opaco podría aumentar el riesgo de ataques de Spectre en línea". República tecnológica . Consultado el 9 de junio de 2019 .
  78. ^ R, Bhagyashree (30 de octubre de 2018). "Google Chrome 70 ahora admite subprocesos WebAssembly para crear aplicaciones web multiproceso". Pub Pack . Consultado el 9 de junio de 2019 .
  79. ^ ab Lonkar, Aishwarya; Chandrayan, Siddhesh (octubre de 2018). "El lado oscuro de WebAssembly". Boletín de virus . Consultado el 8 de junio de 2019 .
  80. ^ Segura, Jérôme (29 de noviembre de 2017). "La criptominería persistente desde el vehículo llega a un navegador cercano a usted". Malwarebytes . Consultado el 8 de junio de 2019 .
  81. ^ "Un estudio reciente estima que el 50% de los sitios web que utilizan WebAssembly lo aplican con fines maliciosos". InfoQ . Consultado el 3 de noviembre de 2019 .
  82. ^ Musch, Marius; Wressnegger, cristiano; Johns, Martín; Rieck, Konrad (junio de 2019). "New Kid en la Web: un estudio sobre la prevalencia de WebAssembly en la naturaleza". Detección de Intrusiones y Malware, y Evaluación de Vulnerabilidades (PDF) . Apuntes de conferencias sobre 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 desde el original (PDF) el 26 de julio de 2022 . Consultado el 15 de febrero de 2022 .Diapositivas (PDF) Archivado el 3 de noviembre de 2019 en Wayback Machine.
  83. ^ Aaron Hilbig, Daniel Lehmann y Michael Pradel (abril de 2021). "Un estudio empírico de los binarios de WebAssembly del mundo real: seguridad, lenguajes, casos de uso". (Archivado en abril de 2021) https://software-lab.org/publications/www2021.pdf
  84. ^ Watt, Conrad (8 de enero de 2018). "Mecanización y verificación de la especificación WebAssembly". Actas de la 7ma 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.
  85. ^ "Ejecutando simbólicamente WebAssembly en Manticore". 31 de enero de 2020 . Consultado el 10 de febrero de 2020 .
  86. ^ "Repositorio de interfaz del sistema WebAssembly". GitHub /WebAssembly . 10 de febrero de 2020.
  87. ^ "Antecedentes adicionales sobre capacidades". GitHub . alianza de código de bytes. 4 de marzo de 2022.
  88. ^ "Estandarización de WASI: una interfaz del sistema para ejecutar WebAssembly fuera de la web - Mozilla Hacks - el blog para desarrolladores web". Mozilla Hacks: el blog para desarrolladores web .
  89. ^ "Repositorio de raíz del sistema de referencia". GitHub /WebAssembly . 12 de enero de 2020.
  90. ^ "Repositorio wasm-c-api". GitHub /WebAssembly . 3 de febrero de 2020.
  91. ^ ab "El tiempo de ejecución de WebAssembly" Wasmer "está disponible con carácter general". InfoQ . Consultado el 19 de febrero de 2021 .
  92. ^ "Justificación del diseño". GitHub /WebAssembly/diseño . 1 de octubre de 2016.
  93. ^ "Portabilidad: WebAssembly". webassembly.org . Consultado el 28 de julio de 2020 .
  94. ^ "Convenciones: WebAssembly 1.0". webassembly.github.io . Consultado el 12 de noviembre de 2019 .
  95. ^ "Introducción: WebAssembly 1.0". webassembly.github.io . Consultado el 17 de mayo de 2019 .
  96. ^ "Instrucciones: WebAssembly 1.0". webassembly.github.io . Consultado el 12 de noviembre de 2019 .
  97. ^ Lively, Thomas (19 de febrero de 2021) [Solicitud de extracción abierta el 5 de febrero de 2021]. "Códigos de operación finales de tlively · Solicitud de extracción n.º 452 · WebAssembly/simd · GitHub". Alianza de código de bytes . Consultado el 12 de mayo de 2021 a través de GitHub .
  98. ^ Delendik, Yury (19 de febrero de 2021) [Cambios en SIMD comprometidos el 19 de febrero de 2021]. "Archivo wasm-tools/expr.rs en b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub". Alianza de código de bytes . Consultado el 12 de mayo de 2021 a través de GitHub .
  99. ^ "Actualice el intérprete y el texto con códigos de operación finalizados por ngzhian · Solicitud de extracción n.º 486 · WebAssembly/simd". GitHub . Consultado el 14 de mayo de 2021 .
  100. ^ "WebAssembly/simd". GitHub . Consultado el 14 de mayo de 2021 .
  101. ^ WebAssembly/relaxed-simd, WebAssembly, 3 de mayo de 2021 , consultado el 14 de mayo de 2021
  102. ^ "Cómo hicimos que la JVM fuera 40 veces más rápida". astojanov.github.io . Consultado el 17 de febrero de 2021 .
  103. ^ "Hoja de ruta". Asamblea web . Marzo de 2017.
  104. ^ Grupo comunitario WebAssembly (enero de 2020). "Especificación de WebAssembly versión 1.0" . Consultado el 13 de enero de 2020 .
  105. ^ "Instrucciones plegadas". GitHub ./ WebAssembly / especificaciones
  106. ^ "Módulos (binario)". WebAsamblea 1.0 .
  107. ^ "Demostración de WebAssembly Binary Toolkit (wabt)". webassembly.github.io .

 Este artículo incorpora texto de un trabajo de contenido gratuito . Licenciado bajo Licencia Apache 2.0 (declaración/permiso de licencia). Texto tomado de Formato de texto​, jfbastien; cromo rossberg; kripken; titzer; s3ththompson; código pez luna; lukewagner; banderaxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAsamblea/diseño.

enlaces externos