stringtranslate.com

Mono araña

SpiderMonkey es un motor JavaScript y WebAssembly de código abierto de la Fundación Mozilla . [4]

Es el primer motor JavaScript , escrito por Brendan Eich en Netscape Communications, y posteriormente lanzado como código abierto y actualmente mantenido por la Fundación Mozilla. Se utiliza en el navegador web Firefox .

Historia

Eich "escribió JavaScript en diez días" en 1995, [5] después de haber sido "reclutado para Netscape con la promesa de 'hacer Scheme ' en el navegador". [6] (La idea de utilizar 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, que necesitaba "pagar [la] sustancial deuda técnica "Se fue del primer año, "se quedó en casa durante dos semanas para reescribir Mocha como el código base 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 SpiderMonkey a Dave Mandelin. [5]

Versiones

Estándares

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

Internos

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

TrazaMono

TraceMonkey [10] 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, [11] el compilador pasó a formar 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 básico de Firefox 3 . [12]

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 , rutas altamente especializadas de código nativo .

Las mejoras en JägerMonkey eventualmente hicieron que TraceMonkey quedara obsoleto, especialmente con el desarrollo del motor de inferencia de tipos SpiderMonkey . TraceMonkey está ausente en SpiderMonkey desde Firefox 11 en adelante. [13]

JägerMono

JägerMonkey, llamado 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 . [14] [15] Fue lanzado por primera vez en Firefox 4 y finalmente 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 iterando linealmente hacia adelante a través del código de bytes de SpiderMonkey , la representación de la función interna. Aunque esto prohíbe optimizaciones que requieran reordenamiento de instrucciones, la compilación de JägerMonkey tiene la ventaja de ser muy rápida, lo cual es útil para JavaScript ya que la recompilación debido al cambio de tipos de variables es frecuente.

Mozilla implementó una serie de optimizaciones críticas en JägerMonkey, las más importantes cachés en línea polimórficas e inferencia de tipos . [dieciséis]

La diferencia entre las técnicas TraceMonkey y JägerMonkey JIT 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 archivada el 9 de diciembre de 2012 en archive.today . Puede encontrar más información técnica en los blogs de otros desarrolladores: dvander, dmandelin.

Mono Ion

IonMonkey era un compilador JIT de JavaScript de Mozilla, cuyo objetivo era permitir muchas optimizaciones nuevas que eran imposibles con la arquitectura anterior de JägerMonkey. [17]

IonMonkey era un compilador más tradicional: traducía el código de bytes de SpiderMonkey en un gráfico de flujo de control , utilizando un formulario de asignación única (SSA) estático para la representación intermedia . Esta arquitectura permitió utilizar 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ódigos muertos y el movimiento de código invariante en bucle . [18]

El compilador puede emitir 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]

OdínMono

OdinMonkey es el nombre del nuevo módulo de optimización de Mozilla para asm.js , un subconjunto de JavaScript fácilmente compilable. OdinMonkey en sí no es un compilador JIT, utiliza el compilador JIT actual. Está incluido con Firefox desde la versión 22.

mono warp

WarpMonkey JIT reemplaza el antiguo motor IonMonkey de la versión 83. [20] Es capaz de incorporar otros scripts y especializar código en función de los datos y argumentos que se procesan. Traduce el código de bytes y los datos de la caché en línea a una representación intermedia de nivel medio (Ion MIR). Este gráfico se transforma y optimiza antes de bajarlo a una representación intermedia de bajo nivel (Ion LIR). Este LIR realiza la asignación de registros y luego genera código de máquina nativo en un proceso llamado Generación de Código. Las optimizaciones aquí suponen que un script continúa viendo datos similares a los vistos antes. Los JIT de referencia son esenciales para el éxito aquí porque generan circuitos integrados que coinciden con los datos observados. Si después de compilar un script con Warp, encuentra datos que no está preparado para manejar, realiza un rescate. El mecanismo de rescate reconstruye el marco de pila de la máquina nativa para que coincida con el diseño utilizado por el intérprete de referencia y luego se bifurca a ese intérprete como si lo estuviéramos ejecutando todo el tiempo. La construcción de este marco de pila puede utilizar una tabla lateral especial guardada por Warp para reconstruir valores que de otro modo no estarían disponibles. [21]

Usar

SpiderMonkey está destinado a integrarse en otras aplicaciones que proporcionan entornos de host para JavaScript. A continuación se incluye una lista incompleta:

SpiderMonkey incluye un Shell de JavaScript para el desarrollo interactivo de JavaScript y para la invocación de archivos de programa JavaScript desde la línea de comandos. [29]

Ver también

Referencias

  1. ^ "1.8.8 – Mono Araña | MDN". Desarrollador.mozilla.org. 10 de enero de 2013. Archivado desde el original el 2 de mayo de 2013 . Consultado el 21 de marzo de 2013 .
  2. ^ "Boletín de SpiderMonkey (Firefox 110-111)". spidermonkey.dev . 16 de febrero de 2023 . Consultado el 27 de diciembre de 2023 .
  3. ^ Políticas de licencia de Mozilla, mozilla.org, archivado desde el original el 2 de abril de 2013 , consultado el 26 de marzo de 2013
  4. ^ "Inicio". Motor SpiderMonkey JavaScript/WebAssembly . Consultado el 24 de abril de 2023 .
  5. ^ abc Eich, Brendan (21 de junio de 2011). "Nuevo propietario del módulo del motor JavaScript". BrendanEich.com. Archivado desde el original el 14 de julio de 2011 . Consultado el 1 de julio de 2011 .
  6. ^ abc 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 .
  7. ^ Eich, Brendan (19 de agosto de 2011). "Mapeo de la esfera de los monos". Archivado desde el original el 13 de enero de 2013 . Consultado el 19 de agosto de 2011 .
  8. ^ "Nuevo en JavaScript 1.6". Archivado desde el original el 5 de septiembre de 2015 . Consultado el 28 de julio de 2015 .
  9. ^ "759422 – Eliminar el uso de e4x en la creación de cuentas" . Consultado el 5 de febrero de 2013 .
  10. ^ "JavaScript: TraceMonkey, MozillaWiki" . Consultado el 22 de julio de 2020 .
  11. ^ "TraceMonkey: JavaScript Lightspeed, blog de Brendan Eich" . Consultado el 22 de julio de 2020 .
  12. ^ Paul, Ryan (22 de agosto de 2008). "Firefox obtendrá un enorme aumento del rendimiento de JavaScript". Ars Técnica. Archivado desde el original el 6 de mayo de 2012 . Consultado el 21 de marzo de 2013 .
  13. ^ 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 .
  14. ^ "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 .
  15. ^ Paul, Ryan (9 de marzo de 2010). "Mozilla toma prestado de WebKit para crear un nuevo motor JS rápido". Ars Técnica. Archivado desde el original el 16 de abril de 2012 . Consultado el 21 de marzo de 2013 .
  16. ^ "JaegerMonkey - MozillaWiki". Wiki.mozilla.org. Archivado desde el original el 23 de agosto de 2013 . Consultado el 21 de marzo de 2013 .
  17. ^ "Plataforma/Características/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 .
  18. ^ "IonMonkey: el 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 .
  19. ^ "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 .
  20. ^ "Warp: rendimiento JS mejorado 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 .
  21. ^ "SpiderMonkey: documentación de documentos fuente de Firefox". firefox-source-docs.mozilla.org . Consultado el 28 de agosto de 2021 .
  22. ^ "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 .
  23. ^ "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 .
  24. ^ "Documentación del SDK de Acrobat DC". helpx.adobe.com . Consultado el 5 de noviembre de 2021 .
  25. ^ "Distributive-Network/PythonMonkey: un motor JavaScript Mozilla SpiderMonkey integrado en la máquina virtual Python, que utiliza el motor Python para proporcionar el entorno de host JS". GitHub . 7 de julio de 2023 . Consultado el 10 de julio de 2023 .
  26. ^ Bolso, Erik Inge (8 de marzo de 2005). "Resumen del navegador en modo texto de 2005". Diario de Linux . Archivado desde el original el 15 de marzo de 2010 . Consultado el 5 de agosto de 2010 .
  27. ^ lista de correo de wine-cvs Archivado el 7 de febrero de 2009 en Wayback Machine , el 16 de septiembre de 2008: "jscript: compilador de expresiones regulares agregado basado en la implementación de expresiones regulares de Mozilla"
  28. ^ "SpiderMonkey > Software libre". Documentos web de MDN . Consultado el 2 de abril de 2019 .
  29. ^ "Introducción al shell de 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 comando, un archivo de programa JavaScript para ejecutar [...]

enlaces externos