SpiderMonkey es el nombre en código del primer motor JavaScript , escrito por Brendan Eich en Netscape Communications, luego lanzado como código abierto y actualmente mantenido por la Fundación Mozilla . Todavía se usa en el navegador web Firefox .
Desarrollador (es) | Fundación Mozilla Mozilla Corporation |
---|---|
Repositorio | |
Escrito en | C , C ++ , óxido |
Sistema operativo | Multiplataforma |
Plataforma | IA-32 , x86-64 , ARM , MIPS , SPARC [1] |
Tipo | Motor de JavaScript |
Licencia | MPL 2.0 [2] |
Sitio web | spidermonkey |
Historia
Eich "escribió JavaScript en diez días" en 1995, [3] habiendo sido "reclutado para Netscape con la promesa de 'hacer Scheme ' en el navegador". [4] (La idea de utilizar Scheme se abandonó cuando "la dirección de ingeniería [decidió] que el lenguaje debía 'parecerse a Java ' ".) [4] A finales de 1996, Eich, que necesitaba "saldar [la] sustancial deuda técnica "Se fue desde el primer año", se quedó en casa durante dos semanas para reescribir Mocha como el código base que se conoció como SpiderMonkey ". [3] (Mocha era el nombre de trabajo original para el idioma). [4] [5] En 2011, Eich transfirió la gestión del código SpiderMonkey a Dave Mandelin. [3]
Versiones
Versión | Fecha de lanzamiento | Versión de ECMAScript correspondiente | Versión del navegador | Funcionalidad agregada |
---|---|---|---|---|
1.0 | Marzo de 1996 | Netscape Navigator 2.0 | ||
1.1 | Agosto de 1996 | Netscape Navigator 3.0 | ||
1.2 | Junio de 1997 | Netscape Navigator 4.0 - 4.05 | ||
1.3 | Octubre de 1998 | ECMA-262 1ra + 2da edición | Netscape Navigator 4.06-4.7x | |
1.4 | Servidor Netscape | |||
1,5 | Noviembre de 2000 | ECMA-262 3a edición | Netscape Navigator 6, Firefox 1.0 | |
1,6 | Noviembre de 2005 [6] | Firefox 1.5 | métodos de matriz adicionales, genéricos de matriz y cadena, E4X | |
1,7 | Octubre de 2006 | Firefox 2.0 | iteradores y generadores, declaración let, comprensión de matrices, asignación de desestructuración | |
1.8 | Junio de 2008 | Firefox 3.0 | expresiones generadoras, cierres de expresiones | |
1.8.5 | Marzo de 2011 | ECMA-262 5ta edición | Firefox 4.0 | Soporte JSON |
1.8.8 | Enero de 2012 | Firefox 10.0 | ||
17 | Noviembre 2012 | Firefox 17.0 | ||
24 | Septiembre 2013 | Firefox 24.0 | ||
31 | Julio de 2014 | Firefox 31.0 | ||
38 | Mayo de 2015 | Firefox 38.0 | ||
45 | Marzo de 2016 | Firefox 45.0 | ||
52 | Marzo de 2017 | Firefox 52.0 | ||
60 | Mayo de 2018 | Firefox 60.0 | ||
68 | Julio de 2019 | Firefox 68.0 | ||
78 | Junio de 2020 | Firefox 78.0 | ||
90 | 2021 | Firefox 90.0 |
Estándares
SpiderMonkey implementa la especificación ECMA-262 ( ECMAScript ). ECMA-357 ( ECMAScript para XML (E4X)) se eliminó a principios de 2013. [7]
Internos
SpiderMonkey está escrito en C / C ++ y contiene un intérprete , el compilador IonMonkey JIT y un recolector de basura .
TraceMonkey
TraceMonkey [8] fue el primer compilador JIT escrito para el lenguaje JavaScript. Introducido inicialmente como una opción en una versión beta y presentado en el blog de Brendan Eich el 23 de agosto de 2008, [9] el compilador se convirtió en parte de la versión principal como parte de SpiderMonkey en Firefox 3.5 , proporcionando "mejoras de rendimiento que oscilan entre 20 y 40 veces más rápido "que el intérprete de línea de base en Firefox 3 . [10]
En lugar de compilar funciones completas, TraceMonkey era un JIT de seguimiento , que opera registrando el flujo de control y los tipos de datos durante la ejecución del intérprete. Estos datos luego informaron la construcción de árboles de rastreo , caminos altamente especializados de código nativo .
Las mejoras en JägerMonkey finalmente hicieron que TraceMonkey quedara obsoleto, especialmente con el desarrollo del motor de inferencia de tipo SpiderMonkey . TraceMonkey está ausente de SpiderMonkey desde Firefox 11 en adelante. [11]
JägerMonkey
JägerMonkey, denominado internamente MethodJIT, era un compilador JIT de método completo diseñado para mejorar el rendimiento en los casos en que TraceMonkey no podía generar código nativo estable . [12] [13] Fue lanzado por primera vez en Firefox 4 y eventualmente suplantó por completo a TraceMonkey. Él mismo ha sido reemplazado por IonMonkey.
JägerMonkey operaba de manera muy diferente a otros compiladores de su clase: mientras que los compiladores típicos trabajaban construyendo y optimizando un gráfico de flujo de control que representaba la función, JägerMonkey operaba en cambio iterando linealmente hacia adelante a través del código de bytes SpiderMonkey , la representación de la función interna. Aunque esto prohíbe las optimizaciones que requieren reordenar las instrucciones, la compilación de JägerMonkey tiene la ventaja de ser muy rápida, lo cual es útil para JavaScript ya que es frecuente la recompilación debido al cambio de tipos de variables.
Mozilla implementó una serie de optimizaciones críticas en JägerMonkey, las más importantes, los cachés en línea polimórficos y la inferencia de tipos . [14]
La diferencia entre las técnicas JIT de TraceMonkey y JägerMonkey y la necesidad de ambas se explicó en un artículo de hacks.mozilla.org . Chris Leary, uno de los desarrolladores de SpiderMonkey, proporcionó una explicación más detallada de los detalles técnicos en una publicación de blog . Se puede encontrar más información técnica en los blogs de otros desarrolladores: dvander , dmandelin .
IonMonkey
IonMonkey es el nombre del compilador JIT de JavaScript actual de Mozilla, cuyo objetivo es permitir muchas optimizaciones nuevas que eran imposibles con la arquitectura JägerMonkey anterior. [15]
IonMonkey es un compilador más tradicional: se traduce SpiderMonkey bytecode en un gráfico de flujo de control , utilizando forma estática sola asignación (SSA) para la representación intermedia . Esta arquitectura permite el uso de optimizaciones conocidas de otros lenguajes de programación para JavaScript, incluida la especialización de tipos, la inserción de funciones , la asignación de registros de escaneo lineal , la eliminación de código muerto y el movimiento de código invariante en bucle . [dieciséis]
El compilador puede emitir traducciones rápidas de código nativo de funciones JavaScript en las plataformas ARM , x86 y x86-64 . Es el motor predeterminado desde Firefox 18. [17]
OdinMonkey
OdinMonkey es el nombre del nuevo módulo de optimización de Mozilla para asm.js , un subconjunto fácilmente compilable de JavaScript. OdinMonkey en sí no es un compilador JIT, utiliza el compilador JIT actual. Se incluye con Firefox desde la versión 22.
Usar
SpiderMonkey está diseñado para integrarse en otras aplicaciones que proporcionan entornos de host para JavaScript. A continuación se muestra una lista incompleta:
- Mozilla Firefox , Thunderbird , SeaMonkey y otras aplicaciones que utilizan el marco de aplicaciones de Mozilla
- Forks de Firefox, incluidos los navegadores web Pale Moon , Basilisk y Waterfox .
- Aplicaciones de almacenamiento de datos:
- MongoDB pasó de V8 a SpiderMonkey en la versión 3.2 [18]
- Riak utiliza SpiderMonkey como tiempo de ejecución para las operaciones de MapReduce de JavaScript [19]
- Sistema de base de datos CouchDB (escrito en Erlang ). JavaScript se utiliza para definir mapas, filtros, funciones de reducción y visualización de datos, por ejemplo, en formato HTML.
- Adobe Acrobat y Adobe Reader, Adobe Flash Professional y Adobe Dreamweaver . Adobe Acrobat DC usa Spidermonkey 24.2 con compatibilidad con ECMA-357 con portado hacia adelante. [20]
- Entorno de escritorio GNOME , versión 3 y posteriores
- Yahoo! Widgets , anteriormente llamado Konfabulator
- FreeSWITCH , motor de telefonía de código abierto, utiliza SpiderMonkey para permitir a los usuarios escribir scripts de administración de llamadas en JavaScript
- El navegador web basado en texto ELinks utiliza SpiderMonkey para admitir JavaScript [21]
- Partes de SpiderMonkey se utilizan en la (re) implementación de JScript del proyecto Wine [22]
- 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 la computadora Macintosh
- 0 AD , un juego de estrategia en tiempo real
- SpiderMonkey también se utiliza en muchos otros proyectos de código abierto; Se mantiene una lista externa en el sitio de desarrolladores de Mozilla. [23]
SpiderMonkey incluye un Shell de JavaScript para el desarrollo interactivo de JavaScript y para la invocación de la línea de comandos de archivos de programa JavaScript. [24]
Ver también
- Rhino (motor JavaScript)
- Lista de motores ECMAScript
Referencias
- ^ "1.8.8 - Mono araña | MDN" . Developer.mozilla.org. 10 de enero de 2013. Archivado desde el original el 2 de mayo de 2013 . Consultado el 21 de marzo de 2013 .
- ^ Políticas de licencias de Mozilla , mozilla.org, archivado desde el original el 2 de abril de 2013 , consultado el 26 de marzo de 2013
- ^ a b c Eich, Brendan (21 de junio de 2011). "Nuevo propietario del módulo de motor de JavaScript" . BrendanEich.com. Archivado desde el original el 14 de julio de 2011 . Consultado el 1 de julio de 2011 .
- ^ a b c Eich, Brendan (3 de abril de 2008). "Popularidad" . BrendanEich.com. Archivado desde el original el 3 de julio de 2011 . Consultado el 1 de julio de 2011 .
- ^ Eich, Brendan (19 de agosto de 2011). "Mapeo de la Monkeysphere" . Archivado desde el original el 13 de enero de 2013 . Consultado el 19 de agosto de 2011 .
- ^ "Nuevo en JavaScript 1.6" . Archivado desde el original el 5 de septiembre de 2015 . Consultado el 28 de julio de 2015 .
- ^ "759422 - Eliminar el uso de e4x en la creación de cuentas" . Consultado el 5 de febrero de 2013 .
- ^ "JavaScript: TraceMonkey, MozillaWiki" . Consultado el 22 de julio de 2020 .
- ^ "TraceMonkey: JavaScript Lightspeed, Blog de Brendan Eich" . Consultado el 22 de julio de 2020 .
- ^ Paul, Ryan (22 de agosto de 2008). "Firefox para obtener un aumento masivo del rendimiento de JavaScript" . Ars Technica. Archivado desde el original el 6 de mayo de 2012 . Consultado el 21 de marzo de 2013 .
- ^ Nethercote, Nicholas (1 de noviembre de 2011). "SpiderMonkey está a dieta | Nicholas Nethercote" . Blog.mozilla.com. Archivado desde el original el 28 de marzo de 2012 . Consultado el 21 de marzo de 2013 .
- ^ "JaegerMonkey - ¡JavaScript rápido, siempre!» Mystery Bail Theatre " . Bailopan.net. 26 de febrero de 2010. Archivado desde el original el 24 de marzo de 2013 . Consultado el 21 de marzo de 2013 .
- ^ Paul, Ryan (9 de marzo de 2010). "Mozilla toma prestado de WebKit para construir un nuevo motor JS rápido" . Ars Technica. Archivado desde el original el 16 de abril de 2012 . Consultado el 21 de marzo de 2013 .
- ^ "JaegerMonkey - MozillaWiki" . Wiki.mozilla.org. Archivado desde el original el 23 de agosto de 2013 . Consultado el 21 de marzo de 2013 .
- ^ "Plataforma / Funciones / IonMonkey - MozillaWiki" . Wiki.mozilla.org. 11 de febrero de 2013. Archivado desde el original el 8 de marzo de 2013 . Consultado el 21 de marzo de 2013 .
- ^ "IonMonkey: nuevo compilador JIT de JavaScript de Mozilla" . Infoq.com. Archivado desde el original el 8 de diciembre de 2012 . Consultado el 21 de marzo de 2013 .
- ^ "Notas de Firefox - Escritorio" . Mozilla.org. 8 de enero de 2013. Archivado desde el original el 2 de septiembre de 2014 . Consultado el 21 de marzo de 2013 .
- ^ "Cambios de JavaScript en MongoDB 3.2 - Manual de MongoDB 3.4" . Archivado desde el original el 6 de junio de 2017 . Consultado el 23 de noviembre de 2016 .
- ^ "La versión Riak 0.8 y JavaScript Map / Reduce" . Archivado desde el original el 3 de noviembre de 2011 . Consultado el 24 de abril de 2011 .
- ^ "Documentación de Acrobat DC SDK" . help.adobe.com . Consultado el 27 de febrero de 2020 .
El motor de JavaScript principal ha migrado a la versión 24.2 de SpiderMonkey (el motor de JavaScript subyacente de Mozilla).
- ^ Bolso, Erik Inge (8 de marzo de 2005). "Resumen del navegador en modo texto 2005" . Diario de Linux . Archivado desde el original el 15 de marzo de 2010 . Consultado el 5 de agosto de 2010 .
- ^ lista de correo wine-cvs Archivado el 7 de febrero de 2009 en Wayback Machine , 16 de septiembre de 2008: "jscript: Compilador de expresiones regulares agregado basado en la implementación de expresiones regulares de Mozilla"
- ^ "Mono Araña> FOSS" . Documentos web de MDN . Consultado el 2 de abril de 2019 .
- ^ "Introducción al shell JavaScript" . MDN . Red de desarrolladores de Mozilla. 29 de septiembre de 2010. Archivado desde el original el 29 de junio de 2011 . Consultado el 14 de diciembre de 2010 .
El shell de JavaScript es un programa de línea de comandos incluido en la distribución fuente de SpiderMonkey. [...] Puede usarlo como un shell interactivo [...] También puede pasar, en la línea de comandos, un archivo de programa JavaScript para ejecutar [...]
enlaces externos
- Página web oficial , Motor SpiderMonkey (JavaScript-C)
- Documentación de SpiderMonkey
- Página de Spidermonkey para enlaces de código abierto
- ¿Somos rápidos todavía? (Benchmark oficial y comparación)