WebAsamblea

Lenguaje ensamblador multiplataforma y código de bytes diseñado para su ejecución en navegadores web

WebAsamblea
Paradigmaestructurado ; máquina de pila [1]
Diseñado porW3C
Revelador
Apareció por primera vezMarzo 2017 ; hace 7 años ( 2017-03 )
Sistema operativoIndependiente de la plataforma
LicenciaLicencia Apache 2.0
Extensiones de nombre de archivo
  • .wat (formato de texto)
  • .wasm (formato binario)
Sitio webwebassembly.org
Influenciado por

WebAssembly ( 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 la comunicación entre dichos programas y su entorno host. [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 no web. [7] Es un estándar abierto [8] [9] destinado a soportar 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 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 Consorcio World Wide Web (W3C) mantiene el estándar con contribuciones de Mozilla , Microsoft , Google , Apple , Fastly , Intel y Red Hat . [15] [16] ( 2015 ) ( 2017-03 )

Historia

El nombre WebAssembly pretende parecer sinónimo del lenguaje ensamblador . El nombre sugiere llevar la programación similar al lenguaje ensamblador a la Web , donde se ejecutará del 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 características de asm.js. [23] El archivo asm.js ya proporciona velocidades de ejecución de código casi nativas [24] [25] y puede considerarse una alternativa viable para los navegadores que no admiten WebAssembly o lo tienen deshabilitado por razones de seguridad.

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

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

Desde abril de 2022, [actualizar]WebAssembly 2.0 estaba en estado de borrador, [32] [33] que agregó muchas instrucciones relacionadas con SIMD y un nuevo tipo de datos v128, con la capacidad de que las funciones devuelvan múltiples valores e inicialicen/copien memoria masiva.

Implementaciones

Aunque WebAssembly fue diseñado 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. [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 estar integradas en aplicaciones host, algunas implementaciones crean entornos de ejecución independientes como Wasmtime  y Wasmer  . [9] [10] Los entornos de ejecución de WebAssembly están integrados 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 ABI basada en WebAssembly para extender servidores proxy . [36] [37]

Navegadores web

En noviembre de 2017, Mozilla declaró el soporte "en todos los navegadores principales", [38] después de que WebAssembly se habilitara de forma predeterminada en Edge 16. [39] Este soporte también incluye navegadores web móviles para iOS y Android. A marzo de 2024, [actualizar]el 99% de los navegadores web rastreados admiten WebAssembly (versión 1.0), [40] más que para su predecesor asm.js. [41] Para algunas extensiones, a partir del borrador estándar 2.0, el soporte puede ser menor, pero aún así, más del 90% de los navegadores web ya pueden admitir, por ejemplo, para extensiones de tipos de referencia. [ 42]

Compiladores

Las implementaciones de WebAssembly suelen utilizar compilación anticipada (AOT) o compilación justo a tiempo (JIT), pero también pueden utilizar un intérprete . Si bien las primeras implementaciones han llegado a los navegadores web , también existen implementaciones que no son de navegador para uso general, como Wasmer, [10] Wasmtime [43] o WAMR, [16] wasm3, WAVM y muchas otras. [44]

Debido a que los ejecutables de WebAssembly están precompilados, es posible utilizar una variedad de lenguajes de programación para crearlos. [45] Esto se logra ya sea mediante la compilación directa a Wasm o mediante una implementación de sus correspondientes máquinas virtuales en Wasm. Se informa que unos 40 lenguajes de programación admiten Wasm como destino de compilación. [46]

Emscripten compila C y C++ a Wasm [26] usando Binaryen y LLVM como backend. [47] El SDK de Emscripten puede compilar el código fuente de cualquier lenguaje compatible 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++ a Wasm. [52] Su objetivo inicial era soportar la compilación desde C y C++ , [53] aunque también está surgiendo soporte para otros lenguajes fuente como Rust , lenguajes .NET [54] [55] [46] y AssemblyScript [56] ( similar a TypeScript ).

Después del lanzamiento de MVP, WebAssembly agregó soporte para subprocesos múltiples y recolección de basura , [57] lo que permitió una compilación más eficiente para lenguajes de programación de recolección de basura como C# (compatible a través de Blazor ), F# (compatible a través de Bolero [58] con la ayuda de Blazor) y Python . [59]

Varios otros lenguajes tienen cierto soporte, incluidos Python , [60] Julia , [61] [62] [63] Ruby [64] y Ring . [65] [66]

Varios sistemas pueden compilar Java y otros lenguajes JVM en JavaScript y WebAssembly. Entre ellos se incluyen CheerpJ, [67] JWebAssembly [68] y TeaVM. [69] Kotlin admite WebAssembly directamente. [70] [71]

Limitaciones

Los navegadores web no permiten que el código WebAssembly manipule directamente el Modelo de objetos del documento . El código Wasm debe respetar a JavaScript para esto. [nota 2]

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

Para las asignaciones de memoria intensiva en WebAssembly, 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". [75]

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

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 agregue soporte para subprocesos con memoria compartida. Debido a esta preocupación, los desarrolladores de WebAssembly suspendieron la función. [79] [80] [81] Sin embargo, para explorar estas futuras extensiones de lenguaje, Google Chrome agregó soporte experimental para la propuesta de subprocesos de WebAssembly en octubre de 2018. [82]

WebAssembly ha sido criticado por permitir una mayor facilidad para ocultar la evidencia a los escritores de malware , estafadores y atacantes de phishing ; WebAssembly está presente en la máquina del usuario solo en su forma compilada, lo que "dificulta la detección de malware". [83] La velocidad y la fácil capacidad de ocultarse en WebAssembly han llevado a su uso en la minería de criptomonedas oculta dentro del dispositivo del visitante del sitio web. [83] [84] [79] 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". [79] 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 de criptomonedas maliciosa, y que el malware representaba más de la mitad de los sitios web que usaban WebAssembly estudiados. [85] [86] Un estudio de abril de 2021 de la Universidad de Stuttgart descubrió que, desde entonces, la minería de criptomonedas ha quedado marginada y ha caído a menos del 1 % de todos los módulos de WebAssembly recopilados de una amplia gama de fuentes, incluido también el millón de sitios web principales de Alexa. [87]

Como WebAssembly sólo admite flujo de control estructurado , es apto para técnicas de verificación de seguridad, incluida la ejecución simbólica . [88]

WASI

WebAssembly System Interface (WASI) es una interfaz simple ( ABI y API ) diseñada por Mozilla con la intención de ser portable a cualquier plataforma. [89] Proporciona características similares a POSIX como E/S de archivos restringida por seguridad basada en capacidad . [90] [91] Hay ABI/API propuestas adicionales. [92] [93]

WASI está influenciado por CloudABI y Capsicum . [ ¿según quién? ]

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". [94]

Especificación

Entorno de acogida

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

Maquina virtual

El código Wasm (código binario, es decir, código de bytes) está pensado para ejecutarse en una máquina virtual portátil (VM). [95] La VM está diseñada para que sea más rápida de analizar y ejecutar que JavaScript y para tener una representación de código compacta. [53] El estándar no estipula ninguna funcionalidad externa (como llamadas al sistema ) que se pueda esperar del código binario Wasm. En cambio, proporciona una forma de ofrecer interconexión a través de módulos mediante el entorno host en el que se ejecuta la VM. [96] [9]

Programa Wasm

Un programa Wasm está diseñado como un módulo independiente que contiene colecciones de varios valores definidos por Wasm y definiciones de tipos de programas. Estos se proporcionan en formato binario o textual (ver a continuación) que tienen una estructura común. [97] Un módulo de este tipo puede proporcionar una función de inicio que se ejecuta al crear una instancia de un binario wasm.

Conjunto de instrucciones

El estándar básico para el formato binario de un programa Wasm define una arquitectura de conjunto de instrucciones (ISA) que consiste en codificaciones binarias específicas de tipos de operaciones que son ejecutadas por la VM (sin especificar exactamente cómo deben ejecutarse). [98] La lista de instrucciones incluye instrucciones estándar de carga/almacenamiento de memoria, numéricas, paramétricas, de control de tipos de instrucciones de flujo e instrucciones de variables específicas de Wasm. [99]

El número de códigos de operación utilizados en el estándar original (MVP) era un poco menos de 200 de los 256 códigos de operación posibles. Las versiones posteriores de WebAssembly elevaron el número de códigos de operación a 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). [100] [101] Esas instrucciones, los "códigos de operación finalizados" [102] 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 [103] y también hay algunas propuestas adicionales de instrucciones para un "MVP posterior a SIMD" posterior, y también hay una propuesta "simd relajada" separada sobre la mesa. [104]

Estos códigos de operación SIMD también son portables y se traducen a conjuntos de instrucciones nativos como x64 y ARM. Por el contrario, ni la JVM de Java ni CIL admiten 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 de SIMD. Hay una extensión para Java que agrega intrínsecos para SIMD x64, [105] que no es portable, es decir, no se puede usar 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. [106] 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, 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 admite WebAssembly.

Código fuente C y WebAssembly correspondiente
Código fuente CFormato de texto .wat de WebAssemblyFormato binario .wasm de WebAssembly
int factorial ( int n ) { si ( n == 0 ) devuelve 1 ; de lo contrario devuelve n * factorial ( n -1 ); }              
( func  ( parámetro  i64 )  ( resultado  i64 )  local.get  0  i64.eqz  si  ( resultado  i64 )  i64.const  1  de lo contrario  local.get  0  local.get  0  i64.const  1  i64.sub  llamada  0  i64.mul  fin )
00 61 73 6D 01 00 00 0001 06 01 60 01 7E 01 7E03 02 01 000A 17 0115 0020 005004 7E42 010520 0020 0042 017D10 007E0B0B

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

El formato de texto de WebAssembly se escribe de manera más canónica en un formato plegado utilizando S-expresiones . Para instrucciones y expresiones, este formato es puramente sintáctico y no tiene diferencias de comportamiento con el formato lineal. [108] A través de wasm2wat, el código anterior se descompila a:

( módulo  ( tipo  $t0  ( func  ( parámetro  i64 )  ( resultado  i64 )))  ( func  $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 a  $f0  ;; el nombre $f0 es el mismo que 0 aquí  ( i64.sub  ( local.get  $p0 )  ( i64.const  1 ))))))))

El compilador genera implícitamente un módulo. La función se referencia mediante una entrada de la tabla de tipos en el binario, por lo tanto, una sección de tipos y la typeemite el descompilador. [109] Se puede acceder al compilador y al descompilador en línea. [110]

Véase 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. [48] [49] [50] Aunque Emscripten puede consumir varios idiomas al usar Clang , pueden surgir algunos problemas. [51]
  2. ^ Para el desarrollo de Rust /Wasm, las bibliotecas de terceros pueden proporcionar parte de la E/S de JavaScript necesaria. [72] [73]

Referencias

  1. ^ "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, 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; solo necesitan comportarse como si lo hicieran.
  2. ^ Mozilla. «Comprender el formato de texto de WebAssembly». MDN Web Docs . 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 incrustación específicos, como la Web. Cada uno de ellos definirá una interfaz de programación de aplicaciones (API) de WebAssembly adecuada para un entorno determinado.
  7. ^ "Introducción: WebAssembly 1.1". webassembly.github.io . 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 funciones específicas de la Web, por lo que también se puede utilizar en otros entornos.
  8. ^ Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 de junio de 2017). "Cómo acelerar la Web 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 de 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 su integración en múltiples contextos, y esperamos que en el futuro estén disponibles implementaciones independientes.
  9. ^ abc "Fuera de la web: binarios independientes de WebAssembly con Emscripten · V8". v8.dev . Consultado el 28 de julio de 2020 .
  10. ^ abc "Wasmer - El entorno de ejecución universal de WebAssembly". wasmer.io . Consultado el 19 de febrero de 2021 . Compila todo en WebAssembly. Ejecútalo en cualquier SO o incorpóralo en otros lenguajes.
  11. ^ Consorcio World Wide Web. «Especificación básica 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 lenguaje 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 de 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 Technica . Condé 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 lanzamiento". GitHub / WebAssembly / diseño . 11 de junio de 2015.
  18. ^ Wagner, Luke (14 de marzo de 2016). "Un hito de WebAssembly: soporte experimental en múltiples navegadores". Mozilla Hacks .
  19. ^ Thompson, Seth (15 de marzo de 2016). "Soporte experimental para WebAssembly en V8". V8 Blog .
  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 va a eliminar el soporte para PNaCl". InfoQ . Consultado el 22 de diciembre de 2017 .
  23. ^ "WebAssembly: un formato binario para la web". ②ality – JavaScript y más . 18 de junio de 2015.
  24. ^ "Mirando al sol: Dalvik vs. ASM.js vs. Native". blog.mozilla.org . Agosto de 2013 . Consultado el 7 de diciembre de 2019 . Incluso descartando la única 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}}: CS1 maint: 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". InfoWorld . Consultado el 23 de diciembre de 2017 .
  27. ^ "Primeros borradores públicos de WebAssembly". W3C. 15 de febrero de 2018. Consultado el 20 de abril de 2018 .
  28. ^ "Especificación básica 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. ^ "WebAssembly Web API". W3C. 15 de febrero de 2018. Consultado el 20 de abril de 2018 .
  31. ^ "Subprocesos basados ​​en WebAssembly Worker: 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 públicos de trabajo de WebAssembly 2.0 | Noticias del W3C". 19 de abril de 2022. Consultado el 9 de septiembre de 2022 .
  34. ^ "Incrustaciones no web". WebAssembly . Consultado el 15 de mayo de 2019 .
  35. ^ "Incrustaciones no web". GitHub / WebAssembly . Consultado el 15 de mayo de 2019 .
  36. ^ Freese, Danny (3 de octubre de 2023). "Proxy-Wasm: es WebAssembly para proxies". Blog. Kong . Consultado el 6 de mayo de 2024 .
  37. ^ "proxy-wasm/spec: WebAssembly para proxies (especificación ABI)". GitHub . Consultado el 6 de mayo de 2024 .
  38. ^ "WebAssembly ya es compatible con todos los navegadores principales". El blog de Mozilla . Consultado el 21 de noviembre de 2017 .
  39. ^ "Presentación de 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 .
  40. ^ "WebAssembly | ¿Puedo usar... Tablas de soporte para HTML5, CSS3, etc." canIuse.com . Consultado el 1 de marzo de 2024 .
  41. ^ "asm.js | ¿Puedo usar... Tablas de soporte para HTML5, CSS3, etc." caniuse.com . Consultado el 29 de septiembre de 2024 .
  42. ^ "Tipos de referencia de WebAssembly | ¿Puedo usar... Tablas de soporte para HTML5, CSS3, etc." caniuse.com . Consultado el 3 de marzo de 2024 .
  43. ^ "Wasmtime: un entorno de ejecución pequeño y eficiente para WebAssembly y WASI". wasmtime.dev . Consultado el 18 de diciembre de 2020 .
  44. ^ "Hoja de ruta" . Consultado el 7 de diciembre de 2021 .
  45. ^ 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 .
  46. ^ ab "Awesome WebAssembly Languages". GitHub . 26 de junio de 2018 . Consultado el 15 de febrero de 2022 .
  47. ^ 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 .
  48. ^ "Guía del desarrollador - WebAssembly". webassembly.org . Consultado el 10 de junio de 2019 .
  49. ^ "Compilación de un nuevo módulo C/C++ en WebAssembly". MDN Web Docs . Consultado el 10 de junio de 2019 .
  50. ^ "Building to WebAssembly — Documentación de Emscripten 1.38.33". emscripten.org . Consultado el 10 de junio de 2019 .
  51. ^ "Emscripting de una biblioteca C en Wasm | Web". Google Developers . Consultado el 10 de junio de 2019 .
  52. ^ "Notas de la versión de LLVM 8.0.0 — Documentación de LLVM 8". releases.llvm.org . Consultado el 22 de octubre de 2019 .
  53. ^ ab "Objetivos de alto nivel de WebAssembly". GitHub / WebAssembly / diseño . 11 de diciembre de 2015.
  54. ^ 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 .
  55. ^ "Preguntas frecuentes (FAQ) sobre Blazor". blazor.net . Consultado el 18 de junio de 2018 .
  56. ^ AssemblyScript/assemblyscript, The AssemblyScript Project, 9 de septiembre de 2020 , consultado el 9 de septiembre de 2020
  57. ^ "WebAssembly Garbage Collection (WasmGC) ahora está habilitado de forma predeterminada en Chrome | Blog". Chrome para desarrolladores . Consultado el 11 de diciembre de 2023 .
  58. ^ "Bolero: F# en WebAssembly". fsbolero.io . Consultado el 25 de julio de 2019 .
  59. ^ "Una nueva forma de incorporar lenguajes de programación con recolección de basura de manera eficiente a WebAssembly · V8". v8.dev . Consultado el 11 de diciembre de 2023 .
  60. ^ "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 .
  61. ^ "Julia en el navegador". nextjournal.com . Consultado el 9 de abril de 2019 .
  62. ^ "Plataforma WebAssembly por tshort · Solicitud de incorporación de cambios n.° 2 · JuliaPackaging/Yggdrasil". GitHub . Consultado el 9 de abril de 2019 .
  63. ^ Fischer, Keno (22 de julio de 2019), GitHub - Keno/julia-wasm: Ejecución de Julia en wasm. , consultado el 25 de julio de 2019
  64. ^ "MRuby en tu navegador". ruby.dj . Consultado el 25 de julio de 2019 .
  65. ^ Paul Krill (24 de agosto de 2020). "La actualización del lenguaje Ring se centra en WebAssembly". InfoWorld .
  66. ^ "Anillo en el navegador web" . Consultado el 17 de agosto de 2024 .
  67. ^ "Compilador de Java a WebAssembly - CheerpJ" . Consultado el 27 de abril de 2023 .
  68. ^ JWebAssembly, 27 de abril de 2023 – vía GitHub
  69. ^ "TeaVM — Descripción general". www.teavm.org . Consultado el 27 de abril de 2023 .
  70. ^ "Llevar Kotlin a la Web" . Consultado el 11 de diciembre de 2023 .
  71. ^ Deleuze, Sébastien (13 de febrero de 2023). «El enorme potencial de Kotlin/Wasm». seb.deleuze.fr . Consultado el 11 de diciembre de 2023 .
  72. ^ "stdweb - Rust". docs.rs . Consultado el 5 de junio de 2019 . El objetivo de este paquete es proporcionar enlaces de Rust a las API web y permitir un alto grado de interoperabilidad entre Rust y JavaScript.
  73. ^ "web_sys - Rust". docs.rs . Consultado el 5 de junio de 2019 . Enlaces de API sin procesar para API web. Se trata de un paquete generado de manera procedimental desde el WebIDL del navegador que proporciona un enlace a todas las API que el navegador proporciona en la web.
  74. ^ "El estado de WebAssembly en 2023". Scott Logic. 18 de octubre de 2023. Consultado el 14 de marzo de 2024 .
  75. ^ "Wasm necesita una mejor historia de gestión de memoria · Issue #1397 · WebAssembly/design". GitHub . Consultado el 15 de febrero de 2021 .
  76. ^ "WebAssembly/content-security-policy". GitHub . Consultado el 17 de febrero de 2021 .
  77. ^ "948834 - chromium - Un proyecto de código abierto para ayudar a que la web avance. - Monorail". bugs.chromium.org . Consultado el 17 de febrero de 2021 .
  78. ^ ab "No hay forma de usar WebAssembly en Chrome sin 'unsafe-eval' · Problema n.° 7 · WebAssembly/content-security-policy". GitHub . Consultado el 17 de febrero de 2021 .
  79. ^ abc 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 .
  80. ^ Cimpanu, Catalin (24 de junio de 2018). "Los cambios en WebAssembly podrían hacer que los parches para los navegadores Meltdown y Spectre sean inútiles". Bleeping Computer . Consultado el 8 de junio de 2019 .
  81. ^ Sanders, James (25 de junio de 2018). «Cómo el código WebAssembly opaco podría aumentar el riesgo de ataques Spectre en línea». Tech Republic . Consultado el 9 de junio de 2019 .
  82. ^ R, Bhagyashree (30 de octubre de 2018). «Google Chrome 70 ahora admite subprocesos WebAssembly para crear aplicaciones web multiproceso». Packt Pub . Consultado el 9 de junio de 2019 .
  83. ^ ab Lonkar, Aishwarya; Chandrayan, Siddhesh (octubre de 2018). "El lado oscuro de WebAssembly". Boletín de virus . Consultado el 8 de junio de 2019 .
  84. ^ Segura, Jérôme (29 de noviembre de 2017). «La criptominería persistente drive-by llega a un navegador cercano a ti». Malwarebytes . Consultado el 8 de junio de 2019 .
  85. ^ "Estudio reciente estima que el 50% de los sitios web que utilizan WebAssembly lo utilizan con fines maliciosos". InfoQ . Consultado el 3 de noviembre de 2019 .
  86. ^ 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". Detección de intrusiones y malware, y evaluación de vulnerabilidades (PDF) . Apuntes 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 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.
  87. ^ 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
  88. ^ 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, California, EE. UU.: ACM. págs. 53–65. doi :10.1145/3167082. ISBN. 978-1-4503-5586-5. Número de identificación del sujeto  9401691.
  89. ^ "Repositorio de la interfaz del sistema WebAssembly". GitHub / WebAssembly . 10 de febrero de 2020.
  90. ^ "Información adicional sobre las capacidades". GitHub . bytecodealliance. 4 de marzo de 2022.
  91. ^ "Estandarización de WASI: una interfaz de sistema para ejecutar WebAssembly fuera de la web – Mozilla Hacks - el blog para desarrolladores web". Mozilla Hacks – el blog para desarrolladores web .
  92. ^ "Repositorio reference-sysroot". GitHub / WebAssembly . 12 de enero de 2020.
  93. ^ "Repositorio wasm-c-api". GitHub / WebAssembly . 3 de febrero de 2020.
  94. ^ Hykes, Solomon (27 de marzo de 2019). «Solomon Hykes en X». Twitter . Consultado el 29 de septiembre de 2024 .
  95. ^ "Fundamentos del diseño". GitHub / WebAssembly / design . 1 de octubre de 2016.
  96. ^ "Portabilidad - WebAssembly". webassembly.org . Consultado el 28 de julio de 2020 .
  97. ^ "Convenciones — WebAssembly 1.0". webassembly.github.io . Consultado el 12 de noviembre de 2019 .
  98. ^ "Introducción: WebAssembly 1.0". webassembly.github.io . Consultado el 17 de mayo de 2019 .
  99. ^ "Instrucciones — WebAssembly 1.0". webassembly.github.io . Consultado el 12 de noviembre de 2019 .
  100. ^ Lively, Thomas (19 de febrero de 2021) [Solicitud de incorporación de cambios abierta el 5 de febrero de 2021]. "Opcodes finales de tlively · Solicitud de incorporación de cambios n.° 452 · WebAssembly/simd · GitHub". Bytecode Alliance . Consultado el 12 de mayo de 2021 – a través de GitHub .
  101. ^ Delendik, Yury (19 de febrero de 2021) [Cambios en SIMD realizados el 19 de febrero de 2021]. «Archivo wasm-tools/expr.rs en b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub». Bytecode Alliance . Consultado el 12 de mayo de 2021 – a través de GitHub .
  102. ^ "Actualizar intérprete y texto con códigos de operación finalizados por ngzhian · Solicitud de incorporación de cambios n.° 486 · WebAssembly/simd". GitHub . Consultado el 14 de mayo de 2021 .
  103. ^ "WebAssembly/simd". GitHub . Consultado el 14 de mayo de 2021 .
  104. ^ WebAssembly/relaxed-simd, WebAssembly, 3 de mayo de 2021 , consultado el 14 de mayo de 2021
  105. ^ "Cómo hicimos que la JVM fuera 40 veces más rápida". astojanov.github.io . Consultado el 17 de febrero de 2021 .
  106. ^ "Hoja de ruta". WebAssembly . Marzo de 2017.
  107. ^ WebAssembly Community Group (enero de 2020). «WebAssembly Specification Release 1.0» (Versión 1.0 de la especificación de WebAssembly) . Consultado el 13 de enero de 2020 .
  108. ^ "Instrucciones plegadas". GitHub ./ WebAssembly / especificación
  109. ^ "Módulos (Binarios)". WebAssembly 1.0 .
  110. ^ "Demostraciones del kit de herramientas binarias WebAssembly (wabt)". webassembly.github.io .

 Este artículo incorpora texto de un trabajo de contenido libre . Licencia Apache 2.0 (declaración de licencia/permiso). Texto tomado de Text Format​, jfbastien; rossberg-chromium; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAssembly/design.

  • Sitio web oficial
  • Grupo comunitario del W3C
  • Especificación de WebAssembly
  • Documentos de diseño de WebAssembly
  • "WebAssembly", MDN Web Docs , 16 de abril de 2024 – con información sobre compatibilidad y especificaciones del navegador (API JavaScript de WebAssembly)
Obtenido de "https://es.wikipedia.org/w/index.php?title=WebAssembly&oldid=1250522516"