Articulo de referencia

Mono araña

{{cite web |url=https://developer.mozilla.org/en-US/docs/SpiderMonkey/1.8.8#Platform_support |title=1.8.8 – SpiderMonkey | MDN |publisher=Developer.mozilla.org |date=10 Jan...

SpiderMonkey es un motor de JavaScript y WebAssembly de código abierto de la Fundación Mozilla . [ 4 ] El motor impulsa el navegador web Firefox y ha utilizado varias generaciones de compiladores de JavaScript justo a tiempo (JIT) , incluidos TraceMonkey, JägerMonkey, IonMonkey y el actual WarpMonkey.

Se trata del primer motor JavaScript , escrito por Brendan Eich en Netscape Communications, y posteriormente publicado como código abierto, actualmente mantenido por la Fundación Mozilla. Su diseño permite su integración en aplicaciones más allá de los navegadores web, con implementaciones que incluyen el sistema de bases de datos MongoDB, Adobe Acrobat y el entorno de escritorio GNOME.

Historia

Eich "escribió JavaScript en diez días" en 1995, [ 5 ] habiendo sido "reclutado por Netscape con la promesa de 'hacer Scheme ' en el navegador". [ 6 ] (La idea de usar Scheme se abandonó cuando "la dirección de ingeniería [decidió] que el lenguaje debía 'parecerse a Java ' " .) [ 6 ] A finales de 1996, Eich, necesitando "pagar [la] considerable deuda técnica " que quedó del primer año, "se quedó en casa durante dos semanas para reescribir Mocha como la base de código que se conoció como SpiderMonkey". [ 5 ] (Mocha era el nombre de trabajo original del lenguaje). [ 6 ] [ 7 ] En 2011, Eich transfirió la gestión del código de SpiderMonkey a Dave Mandelin. [ 5 ]

Versiones

Estándares

SpiderMonkey implementa la especificación ECMA-262 ( ECMAScript ). La especificación ECMA-357 ( ECMAScript para XML (E4X)) se abandonó a principios de 2013. [ 24 ]

Interiores

SpiderMonkey está escrito en C / C++ y contiene un intérprete , el compilador JIT WarpMonkey y un recolector de basura .

TraceMonkey

TraceMonkey [ 17 ] fue el primer compilador JIT escrito para el lenguaje JavaScript. Inicialmente introducido como una opción en una versión beta y presentado en el blog de Brendan Eich el 23 de agosto de 2008, [ 25 ] el compilador pasó a formar parte de la versión principal como parte de SpiderMonkey en Firefox 3.5 , proporcionando "mejoras de rendimiento que van entre 20 y 40 veces más rápido" que el intérprete base en Firefox 3. [ 26 ]

En lugar de compilar funciones completas, TraceMonkey era un compilador JIT de rastreo , que opera registrando el flujo de control y los tipos de datos durante la ejecución del intérprete. Estos datos luego servían de base para la construcción de árboles de rastreo , rutas altamente especializadas del código nativo .

Las mejoras en JägerMonkey acabaron dejando obsoleto a TraceMonkey, especialmente con el desarrollo del motor de inferencia de tipos SpiderMonkey . TraceMonkey no está presente en SpiderMonkey desde Firefox 11 en adelante. [ 27 ]

JägerMonkey

JägerMonkey, conocido internamente como MethodJIT, era un compilador JIT de método completo diseñado para mejorar el rendimiento en casos donde TraceMonkey no podía generar código nativo estable . [ 28 ] [ 29 ] Se lanzó por primera vez en Firefox 4 y finalmente reemplazó por completo a TraceMonkey. A su vez, fue reemplazado por IonMonkey.

JägerMonkey funcionaba de forma muy diferente a otros compiladores de su clase: mientras que los compiladores típicos construían y optimizaban un grafo de flujo de control que representaba la función, JägerMonkey, en cambio, iteraba linealmente hacia adelante a través del bytecode de SpiderMonkey , la representación interna de la función. Si bien esto impide las optimizaciones que requieren la reordenación de instrucciones, la compilación con JägerMonkey tiene la ventaja de ser muy rápida, lo cual es útil para JavaScript, ya que la recompilación debido a cambios en los tipos de variables es frecuente.

Mozilla implementó una serie de optimizaciones críticas en JägerMonkey, entre las que destacan las cachés en línea polimórficas y la inferencia de tipos . [ 30 ]

La diferencia entre las técnicas JIT de TraceMonkey y JägerMonkey, así como la necesidad de ambas, se explicaron en un artículo de hacks.mozilla.org . Chris Leary, uno de los desarrolladores de SpiderMonkey, ofreció una explicación más detallada de los aspectos técnicos en una entrada de blog ( enlace obsoleto archivado el 9 de diciembre de 2012 en archive.today ). Se puede encontrar más información técnica en los blogs de otros desarrolladores: dvander y dmandelin .

IonMonkey

IonMonkey era un compilador JIT de JavaScript de Mozilla, que tenía como objetivo permitir muchas optimizaciones nuevas que eran imposibles con la arquitectura anterior de JägerMonkey. [ 31 ]

IonMonkey era un compilador más tradicional: traducía el código de bytes de SpiderMonkey a un grafo de flujo de control , utilizando la forma de asignación única estática (SSA) para la representación intermedia . Esta arquitectura permitió utilizar optimizaciones bien conocidas de otros lenguajes de programación para JavaScript, incluyendo la especialización de tipos, la inserción de funciones en línea, la asignación de registros de exploración lineal , la eliminación de código muerto y el movimiento de código invariante en bucles . [ 32 ]

El compilador puede generar traducciones rápidas de código nativo de funciones JavaScript en las plataformas ARM , x86 y x86-64 . Ha sido el motor predeterminado desde Firefox 18. [ 19 ]

OdinMonkey

OdinMonkey is the name of Mozilla's new optimization module for asm.js, an easily compilable subset of JavaScript. OdinMonkey itself is not a JIT compiler, it uses the current JIT compiler. It's included with Firefox from release 22.[33] OdinMonkey is disabled by default since Firefox 148 released in February 2026.[34]

WarpMonkey

The WarpMonkey JIT replaces the former IonMonkey engine from version 83.[22] It is able to inline other scripts and specialize code based on the data and arguments being processed. It translates the bytecode and Inline Cache data into a Mid-level Intermediate Representation (Ion MIR). This graph is transformed and optimized before being lowered to a Low-level Intermediate Representation (Ion LIR). This LIR performs register allocation and then generates native machine code in a process called Code Generation. The optimizations here assume that a script continues to see data similar what has been seen before. The Baseline JITs are essential to success here because they generate ICs that match observed data. If after a script is compiled with Warp, it encounters data that it is not prepared to handle it performs a bailout. The bailout mechanism reconstructs the native machine stack frame to match the layout used by the Baseline Interpreter and then branches to that interpreter as though we were running it all along. Building this stack frame may use special side-table saved by Warp to reconstruct values that are not otherwise available.[35]

Use

SpiderMonkey is intended to be embedded in other applications that provide host environments for JavaScript. An incomplete list follows:

  • Mozilla Firefox, Thunderbird, SeaMonkey, and other applications that use the Mozilla application framework
  • Data storage applications:
    • MongoDB moved from V8 to SpiderMonkey in version 3.2[36]
    • Riak uses SpiderMonkey as the runtime for JavaScript MapReduce operations[37]
    • CouchDB database system (written in Erlang). JavaScript is used for defining maps, filters, reduce functions and viewing data, for example in HTML format.
  • Adobe Acrobat and Adobe Reader, Adobe Flash Professional, and Adobe Dreamweaver. Adobe Acrobat DC uses Spidermonkey 24.2 with ECMA-357 support forward ported.[38]
  • Entorno de escritorio GNOME , versión 3 y posteriores
  • Entorno de escritorio Cinnamon , versión 1.0 y posteriores
  • Yahoo! Widgets , anteriormente llamado Konfabulator
  • FreeSWITCH , un motor de telefonía de código abierto, utiliza SpiderMonkey para permitir a los usuarios escribir scripts de gestión de llamadas en JavaScript.
  • PythonMonkey utiliza SpiderMonkey para permitir a los usuarios escribir programas donde las funciones, tipos y eventos de JavaScript y Python interactúan y (cuando es posible) comparten almacenamiento de memoria. [ 39 ]
  • El navegador web basado en texto ELinks utiliza SpiderMonkey para admitir JavaScript [ 40 ].
  • Partes de SpiderMonkey se utilizan en la (re)implementación de JScript del proyecto Wine [ 41 ].
  • Synchronet , un servidor BBS, de correo electrónico, web y de aplicaciones que utiliza el motor SpiderMonkey.
  • JavaScript OSA , un lenguaje de comunicación entre procesos SpiderMonkey para el ordenador Mac .
  • 0 AD , un juego de estrategia en tiempo real
  • Wasmer ha incorporado SpiderMonkey a su proyecto de código abierto WinterJS, un entorno de ejecución de JavaScript.
  • SpiderMonkey también se utiliza en muchos otros proyectos de código abierto; se mantiene una lista externa en el sitio para desarrolladores de Mozilla. [ 42 ]

SpiderMonkey incluye un intérprete de JavaScript para el desarrollo interactivo de JavaScript y para la invocación de archivos de programas JavaScript desde la línea de comandos. [ 43 ]

Véase también

Referencias

  1. "1.8.8 – SpiderMonkey | MDN" . Developer.mozilla.org. 10 de enero de 2013. Archivado del original el 2 de mayo de 2013. Consultado el 21 de marzo de 2013 .
  2. "Boletín informativo de SpiderMonkey (Firefox 110-111)" . spidermonkey.dev . 16 de febrero de 2023. Consultado el 27 de diciembre de 2023 .
  3. Políticas de licencias de Mozilla , mozilla.org, archivado del original el 2 de abril de 2013 , consultado el 26 de marzo de 2013.
  4. "Inicio" . Motor JavaScript/WebAssembly SpiderMonkey . Consultado el 24 de abril de 2023 .
  5. 1 2 3 Eich, Brendan (21 de junio de 2011). "Nuevo propietario del módulo del motor JavaScript" . BrendanEich.com. Archivado del original el 14 de julio de 2011. Recuperado el 1 de julio de 2011 .
  6. 1 2 3 Eich, Brendan (3 de abril de 2008). "Popularidad" . BrendanEich.com. Archivado del original el 3 de julio de 2011. Recuperado el 1 de julio de 2011 .
  7. Eich, Brendan (19 de agosto de 2011). "Mapeando la Monkeysphere" . Archivado del original el 13 de enero de 2013. Recuperado el 19 de agosto de 2011 .
  8. 1 2 3 4 5 Wirfs-Brock, Allen; Eich, Brendan (2020). "JavaScript: los primeros 20 años" . Actas de la ACM sobre lenguajes de programación . 4 (HOPL). doi : 10.1145/3386327 .
  9. "Referencia básica de JavaScript v1.4 - Nuevas características de esta versión" . Netscape Communications Corporation. 1998.
  10. https://web.archive.org/web/20140829071706/https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/1.5
  11. http://www.jsdb.org/jsguide/intro.html#1023167
  12. "Novedades en JavaScript 1.6" . Archivado del original el 5 de septiembre de 2015. Consultado el 28 de julio de 2015 .
  13. "Netscape Navigator 2.0b1 para Windows" . Archivado del original el 19 de abril de 1997.(La primera versión beta con soporte para JavaScript, comercializada en aquel entonces como LiveScript).
  14. "Guía de JavaScript del lado del cliente" (PDF) . Versión 1.3. Netscape Communications Corporation. 1999. Consultado el 23 de septiembre de 2025 .
  15. https://github.com/Historic-Spidermonkey-Source-Code/JavaScript-1.4.2/blob/main/src/jsconfig.h#L212
  16. "Firefox 3.5 para desarrolladores" . MDN Web Docs . Mozilla. 30 de junio de 2009. Consultado el 23 de septiembre de 2025 .
  17. 1 2 "JavaScript:TraceMonkey, MozillaWiki" . Consultado el 22 de julio de 2020 .
  18. "Firefox 4 para desarrolladores" . MDN Web Docs . Mozilla. 22 de marzo de 2011. Consultado el 23 de septiembre de 2025 .
  19. 1 2 "Firefox Notes - Escritorio" . Mozilla.org. 8 de enero de 2013. Archivado del original el 2 de septiembre de 2014. Recuperado el 21 de marzo de 2013 .
  20. https://web.archive.org/web/20170430175540/http://kangax.github.io/compat-table/es6/
  21. https://hacks.mozilla.org/2020/06/a-new-regexp-engine-in-spidermonkey/
  22. 1 2 "Warp: Rendimiento mejorado de JS en Firefox 83 – Mozilla Hacks - el blog para desarrolladores web" . Mozilla Hacks – el blog para desarrolladores web . 13 de noviembre de 2020. Consultado el 28 de agosto de 2021 .
  23. "Listado de directorio: /pub/firefox/releases/131.0/source/" . archive.mozilla.org . Archivado del original el 7 de octubre de 2024 . Recuperado el 20 de marzo de 2025 .
  24. "759422 Eliminar el uso de e4x en la creación de cuentas" . Consultado el 5 de febrero de 2013 .
  25. "TraceMonkey: JavaScript Lightspeed, Blog de Brendan Eich" . Consultado el 22 de julio de 2020 .
  26. Paul, Ryan (22 de agosto de 2008). "Firefox obtendrá una mejora masiva en el rendimiento de JavaScript" . Ars Technica. Archivado del original el 6 de mayo de 2012. Recuperado el 21 de marzo de 2013 .
  27. Nethercote, Nicholas (1 de noviembre de 2011). "SpiderMonkey está a dieta | Nicholas Nethercote" . Blog.mozilla.com. Archivado del original el 28 de marzo de 2012. Recuperado el 21 de marzo de 2013 .
  28. "JaegerMonkey – ¡JavaScript rápido, siempre! » Mystery Bail Theater" . Bailopan.net. 26 de febrero de 2010. Archivado del original el 24 de marzo de 2013. Consultado el 21 de marzo de 2013 . 
  29. Paul, Ryan (9 de marzo de 2010). "Mozilla toma prestado de WebKit para construir un nuevo motor JS rápido" . Ars Technica. Archivado del original el 16 de abril de 2012. Recuperado el 21 de marzo de 2013 .
  30. "JaegerMonkey - MozillaWiki" . Wiki.mozilla.org. Archivado del original el 23 de agosto de 2013. Consultado el 21 de marzo de 2013 .
  31. "Plataforma/Características/IonMonkey - MozillaWiki" . Wiki.mozilla.org. 11 de febrero de 2013. Archivado del original el 8 de marzo de 2013. Consultado el 21 de marzo de 2013 .
  32. "IonMonkey: el nuevo compilador JIT de JavaScript de Mozilla" . Infoq.com. Archivado del original el 8 de diciembre de 2012. Consultado el 21 de marzo de 2013 .
  33. "Firefox Notes - Escritorio" . Archivado del original el 3 de septiembre de 2014.
  34. Hunt, Ryan (20 de mayo de 2026). "Decir adiós a asm.js" . SpiderMonkey JavaScript/WebAssembly Engine . Recuperado el 20 de mayo de 2026 .
  35. "SpiderMonkey — Documentación de Firefox Source Docs" . firefox-source-docs.mozilla.org . Consultado el 28 de agosto de 2021 .
  36. "Cambios de JavaScript en MongoDB 3.2 — Manual de MongoDB 3.4" . Archivado del original el 6 de junio de 2017. Consultado el 23 de noviembre de 2016 .
  37. "La versión Riak 0.8 y JavaScript Map/Reduce" . Archivado del original el 3 de noviembre de 2011. Consultado el 24 de abril de 2011 .
  38. "Documentación del SDK de Acrobat DC" . helpx.adobe.com . Consultado el 5 de noviembre de 2021 .
  39. "Distributive-Network/PythonMonkey: Un motor JavaScript SpiderMonkey de Mozilla integrado en la máquina virtual de Python, que utiliza el motor de Python para proporcionar el entorno de host JS" . GitHub . 7 de julio de 2023. Consultado el 10 de julio de 2023 .
  40. Bolso, Erik Inge (8 de marzo de 2005). "Resumen de navegadores en modo texto de 2005" . Linux Journal . Archivado del original el 15 de marzo de 2010. Recuperado el 5 de agosto de 2010 .
  41. Lista de correo wine-cvs Archivada el 7 de febrero de 2009 en Wayback Machine , 16 de septiembre de 2008: "jscript: Se agregó un compilador de expresiones regulares basado en la implementación de regexp de Mozilla"
  42. "SpiderMonkey > FOSS" . MDN Web Docs . Consultado el 2 de abril de 2019 .
  43. "Introducción al intérprete de comandos de JavaScript" . MDN . Mozilla Developer Network. 29 de septiembre de 2010. Archivado del original el 29 de junio de 2011. Consultado el 14 de diciembre de 2010. El intérprete de comandos de JavaScript es un programa de línea de comandos incluido en la distribución del código fuente de SpiderMonkey. [...] Puede usarlo como un intérprete de comandos interactivo. [...] También puede pasar, en la línea de comandos, un archivo de programa JavaScript para ejecutarlo. [...]
  • Sitio web oficial , motor SpiderMonkey (JavaScript-C)Edita esto en Wikidata
  • Calendario de lanzamientos de Firefox (y Spidermonkey)