Ensamblaje web

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 17 de marzo de 2022; las comprobaciones requieren 5 ediciones .
ensamblaje web
clase de idioma orientado a la expresión
Apareció en 2015 [2]
Desarrollador
extensión de archivo .wasto [3].wasm
Liberar 2.0.0 [1]  ( 1 de junio de 2022 )
sistema de tipos estático
sido influenciado Asm.js y cliente nativo
Licencia Licencia Apache 2.0
Sitio web webassembly.org
 Archivos multimedia en Wikimedia Commons

WebAssembly (abreviado como wasm ) es un lenguaje de programación de bajo nivel para la máquina virtual de pila, diseñado como un objetivo de compilación portátil para lenguajes de alto nivel como C , C++ , C# , Rust , Go . Una máquina virtual de pila que ejecuta instrucciones en formato binario wasm se puede ejecutar tanto en un entorno de navegador como en un entorno de servidor. El código Wasm es un árbol de sintaxis abstracta portátil , que proporciona un análisis más rápido y una ejecución más eficiente en comparación con JavaScript .

El proyecto comenzó el 17 de junio de 2015 [4] , el 15 de marzo de 2016 se demostró el trabajo del juego Angry Bots del conjunto de muestras para Unity en el navegador Chromium [5] . Inicialmente, el proyecto se basó en asm.js [6] y PNaCl [7] . En marzo de 2017, la comunidad de desarrolladores llegó a un acuerdo sobre un formato binario, una API para JavaScript y un intérprete de referencia. A fines de mayo de 2017, el equipo del proyecto Chromium anunció planes para desaprobar PNaCl a favor de WebAssembly [8] .

A partir de 2021, el equipo de WebAssembly incluye desarrolladores de Mozilla , Google , Microsoft y Apple , que representan los cuatro navegadores más comunes en el mercado: Firefox , Chrome , Microsoft Edge y Safari , respectivamente [7] .

Presentación

La siguiente tabla muestra tres representaciones diferentes del mismo código fuente tal como se tradujo a wasm:

codigo fuente c "código de bytes de ensamblaje lineal" código binario WASM
int factorial ( int n ) { si ( norte == 0 ) devolver 1 ; más devuelve n * factorial ( n -1 ); } obtener_local 0 i64.eqz si i64 i64.const 1 más obtener_local 0 obtener_local 0 i64.const 1 i64.sub llamada 0 i64.mul final 2000 cincuenta 047e 42 01 05 2000 2000 42 01 7d 1000 7e 0b

El compilador usa internamente una representación de expresión s , que contiene más información que el "código de bytes de ensamblaje lineal". Por ejemplo:

( módulo ( escriba $FUNCSIG$dd ( func ( parámetro f64 ) ( resultado f64 ) ) ) ( import " global.Math " " exp" ( func $exp ( parámetro f64 ) ( resultado f64 ) )) ( memoria 256 256 ) ( exportar "memoria" ( memoria 0 )) ( func $doubleExp ( parámetro $0 f64 ) ( resultado f64 ) ( f64.mul ( llamar $exp ( get_local $0 ) ) ( f64.const 2 ) ) ) ( exportar "doubleExp" ( func $exp doble )) )

Soporte

La compilación en WebAssembly es compatible con muchos idiomas, la implementación se encuentra en diferentes etapas [9] :

  • C y C ++  : a través del conjunto de herramientas Emscripten y Binaryen, se proporciona compilación a asm.js y wasm, utiliza LLVM .
  • C#  , a través de Blazor y Uno Platform, basado en mono .
  • Rust  : el soporte experimental para compilar en wasm se admite desde la versión 1.14 [10] .
  • Elixir y Erlang  : a través del compilador Lumen, diseñado específicamente para WebAssembly [11] .
  • Go  : el soporte experimental para compilar en wasm se admite desde la versión 1.11 [12] .
  • TypeScript  : a través de AssemblyScript .
  • D  - LDC desde la versión 1.11 admite compilar y vincular código D directamente en WebAssembly [13] .
  • Lazarus  : admite ensamblaje en WebAssembly [14]

Compatibilidad con navegador

La implementación de WebAssembly ha estado en todos los principales navegadores (excepto Internet Explorer) desde finales de 2017 [15] :

A partir de julio de 2021, el 94 % de los navegadores instalados son compatibles con WebAssembly [20] . Para navegadores heredados, hay un polyfill asm.js [7] .

Notas

  1. 2.0.0 .
  2. http://webassembly.org/roadmap/
  3. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiateStreaming
  4. ↑ Trabajando en el futuro de las aplicaciones de compilación a web  . Blog de Mike Holman (17 de junio de 2015). Consultado el 7 de junio de 2017. Archivado desde el original el 2 de junio de 2017.
  5. Wagner, Luke Un hito de WebAssembly: soporte experimental en varios navegadores . Mozilla Hacks (14 de marzo de 2016). Consultado el 6 de junio de 2017. Archivado desde el original el 11 de agosto de 2017.
  6. WebAssembly: un formato binario para la  web . ②ality - JavaScript y más (18 de junio de 2015). Consultado el 2 de febrero de 2016. Archivado desde el original el 5 de febrero de 2016.
  7. 1 2 3 Bright, Peter La Web está obteniendo su código de bytes: WebAssembly . Ars Technica . Condé Nast (18 de junio de 2015). Consultado el 20 de noviembre de 2015. Archivado desde el original el 21 de noviembre de 2015.
  8. ¡Adiós PNaCl, hola WebAssembly!  (inglés) (30 de mayo de 2017). Consultado el 10 de junio de 2017. Archivado desde el original el 30 de mayo de 2017.
  9. Awesome WebAssembly Languages ​​. Consultado el 18 de octubre de 2019. Archivado desde el original el 12 de noviembre de 2019.
  10. Anuncio de Rust 1.14  ( 22 de diciembre de 2016). Consultado el 7 de junio de 2017. Archivado desde el original el 5 de mayo de 2017.
  11. Una implementación BEAM alternativa, diseñada para WebAssembly: lumen/lumen . — 2019-12-06. Archivado desde el original el 27 de diciembre de 2019.
  12. Notas de la versión Go 1.11: el lenguaje de programación Go . tip.golang.org. Consultado el 16 de julio de 2018. Archivado desde el original el 14 de agosto de 2018.
  13. Generación de WebAssembly con LDC . Consultado el 13 de noviembre de 2018. Archivado desde el original el 14 de noviembre de 2018.
  14. WebAssembly - Wiki gratuito de Pascal . wiki.freepascal.org. Consultado el 15 de mayo de 2020. Archivado desde el original el 11 de octubre de 2021.
  15. ↑ La compatibilidad con WebAssembly ahora se incluye en todos los navegadores principales  . El blog de Mozilla (13 de noviembre de 2017). Consultado el 31 de octubre de 2019. Archivado desde el original el 31 de octubre de 2019.
  16. WebAssembly - Estado de la plataforma Chrome . Consultado el 7 de junio de 2017. Archivado desde el original el 17 de febrero de 2017.
  17. Firefox 52: Presentación de Web Assembly, CSS Grid y Grid Inspector  ( 7 de marzo de 2017). Consultado el 7 de junio de 2017. Archivado desde el original el 27 de mayo de 2017.
  18. Nuevas funciones de WebKit en Safari 11  ( 22 de septiembre de 2017). Consultado el 30 de septiembre de 2017. Archivado desde el original el 30 de septiembre de 2017.
  19. Presentamos nuevas optimizaciones de JavaScript, WebAssembly, SharedArrayBuffer y Atomics en EdgeHTML 16  ( 31 de octubre de 2017). Consultado el 14 de noviembre de 2017. Archivado desde el original el 15 de noviembre de 2017.
  20. Asamblea web . ¿ Puedo usar Consultado el 22 de marzo de 2020. Archivado desde el original el 13 de noviembre de 2021.

Enlaces