Un motor ECMAScript es un programa que ejecuta código fuente escrito en una versión del estándar de lenguaje ECMAScript , por ejemplo, JavaScript .
Motores de compilación justo a tiempo
Se trata de motores ECMAScript de nueva generación para navegadores web, todos ellos con compilación en tiempo real (JIT) o variaciones de esa idea. Los beneficios de rendimiento de la compilación en tiempo real la hacen mucho más adecuada para aplicaciones web escritas en JavaScript .
- Carakan : motor de JavaScript desarrollado por Opera Software ASA , incluido en la versión 10.50 del navegador web Opera , hasta cambiar a V8 con Opera 15 (lanzado en 2013). [1] [2] [3]
- Chakra (JScript9) : motor JScript utilizado en Internet Explorer . Se presentó por primera vez en MIX 10 como parte de la versión preliminar de la plataforma Internet Explorer 9. [4]
- Chakra : un motor de JavaScript utilizado anteriormente en versiones anteriores de Microsoft Edge , antes de ser reemplazado por V8. [5]
- SpiderMonkey : motor de JavaScript en aplicaciones Mozilla Gecko , incluido Firefox . El motor actualmente incluye el compilador IonMonkey y el módulo de optimización OdinMonkey, y anteriormente incluía el compilador TraceMonkey (primer JIT de JavaScript) y JägerMonkey.
- JavaScriptCore : intérprete de JavaScript y JIT derivado originalmente de KJS . Se utiliza en el proyecto WebKit y en aplicaciones como Safari . También conocido como Nitro, SquirrelFish y SquirrelFish Extreme. [6]
- JScript .NET : un motor JScript de .NET Framework utilizado en ASP.NET basado en Common Language Runtime y COM Interop . Se abandonó la compatibilidad con .NET Core y CoreCLR, por lo que su futuro parece cuestionable para ASP.NET Core .
- Tamarin : un motor ActionScript y ECMAScript utilizado en Adobe Flash .
- V8 : un motor de JavaScript utilizado en Google Chrome y otros navegadores basados en Chromium , Node.js , Deno y V8.NET.
- GNU Guile cuenta con un intérprete ECMAScript a partir de la versión 1.9
- Nashorn : un motor de JavaScript utilizado en Oracle Java Development Kit (JDK) desde la versión 8. [7]
- iv, Analizador léxico/intérprete/VM/método ECMAScript JIT escrito en C++. [8]
- CL-JavaScript: Puede compilar JavaScript en lenguaje máquina en implementaciones de Common Lisp que compilan en lenguaje máquina. [9]
- BESEN: Una implementación completa de compilación JIT de ECMAScript quinta edición escrita en Object Pascal. [10]
- Hermes: desarrollado por Facebook para aplicaciones móviles React Native [11] También se puede utilizar independientemente de React Native.
- Graal.js: un motor JavaScript compatible con ECMAScript para GraalVM que admite interoperabilidad de lenguajes y que también puede ejecutar aplicaciones Node.js.
Motores de interpretación en tiempo de ejecución
Los siguientes motores utilizan intérpretes de tiempo de ejecución, que no se compilan en código de máquina nativo y generalmente se ejecutan más lentamente:
- Continuum: un autointérprete que admite borradores más antiguos de la especificación ECMAScript 2015. [12] De manera única, el motor está implementado en ECMAScript 3, lo que hizo posible ejecutar ES2015 en navegadores tan antiguos como IE6. [13]
- Futhark : El motor ECMAScript del navegador web Opera, versiones 9.50 a 10.10.
- InScript : una biblioteca propietaria obsoleta utilizada para iCab 2 y 3.
- JScript : El motor que se utiliza en Internet Explorer para versiones hasta IE9, y un componente del motor del navegador MSHTML (Trident) .
- Jint: intérprete de Javascript con motor integrado para .NET
- KJS : el motor utilizado en Konqueror y un componente de KHTML , un predecesor de JavaScriptCore.
- Lineal B : El motor ECMAScript del navegador web Opera versiones 7.0 a 9.50, exclusivo.
- Narciso: JavaScript implementado en JavaScript (un evaluador metacircular ), destinado a ejecutarse en otro motor de JavaScript, de naturaleza teórica y educativa únicamente.
- JS-Interpreter Un intérprete de JavaScript ligero implementado en JavaScript con ejecución paso a paso.
- QtScript : desarrollado originalmente por Trolltech, ahora propiedad de The Qt Company . Proporciona integración de QObject con JavaScriptCore.
- V4 (QJSEngine): el motor ECMAScript más nuevo de Qt, que potencia QML y QtQuick. Compatible con ES6 y en desarrollo activo en The Qt Company . La V4 está compilada con JIT. [14]
- Rhino : Uno de los varios motores de JavaScript de Mozilla , que utiliza la plataforma Java .
- YAJI: Un motor ECMAScript basado en la implementación FESI de Jean-Marc Lugrin en 1999, utilizando la plataforma Java , actualmente en desarrollo para soportar los últimos estándares (especificación ECMAScript 262, v5.1). [15] [16] [17]
- Microvium: motor de JavaScript para microcontroladores, compatible con un subconjunto restringido de la especificación ECMAScript, utilizando menos de 16 kB de memoria flash y 64 B de RAM en estado inactivo. [18]
- Duktape: un motor Ecmascript E5/E5.1 de fácil integración y tamaño reducido. [19]
- Motor JavaScript XS: un motor compatible con ECMAScript 2020 para microcontroladores con recursos limitados. [20] [21] XS es mantenido por Moddable como parte del Moddable SDK y anteriormente era parte de la Plataforma Kinoma . [22]
- Jsish: un intérprete de subconjunto ES5.1 con soporte integrado para SQLite, JSON, WebSocket y ZVFS. [23]
- Espruino : un intérprete que ocupa muy poco espacio, especialmente para microcontroladores . Puede ejecutarse en menos de 8 kB de RAM al ejecutarse desde el código fuente (en lugar de desde el código de bytes ).
- MuJS: una biblioteca de interpretación ligera de ECMAScript, diseñada para integrarse en otro software y ampliarlo con capacidades de scripting. Originalmente desarrollada para MuPDF . [24]
- mJS: motor de JavaScript restringido. Se utiliza para la Internet de las cosas (IoT).
- Tiny-JS: Un intérprete de JavaScript mínimo escrito en C++.
- JerryScript: un motor JavaScript ligero de Samsung para microcontroladores con menos de 64 KB de RAM.
- njs: Un intérprete de JavaScript liviano optimizado para scripts de servidores web y la creación de contexto de VM más rápida; utilizado en nginx . [25]
- QuickJS: un intérprete ligero de ECMAScript 6 de Fabrice Bellard y Charlie Gordon.
- engine262: un motor de JavaScript escrito en JavaScript para desarrollo y exploración. Se utiliza principalmente para validar la especificación ECMAScript.
- Boa: Un motor de JavaScript escrito en Rust . [26] [27]
- ScriptEase: un antiguo motor propietario actualizado por última vez en 2003. Sólo es notable por su uso en el telescopio espacial James Webb . [28]
- LibJS: motor de JavaScript de los proyectos SerenityOS y Ladybird . [29] Inicialmente era un intérprete AST, pero se ha actualizado a uno basado en bytecode. [30] En algún momento, el desarrollador principal Andreas Kling agregó la compilación just-in-time (para la arquitectura x86-64), pero luego cambió de opinión y eliminó el mecanismo, [31] citando problemas de desarrollo/depuración y también diciendo que está interesado en ver hasta dónde puede llegar la utilidad y usabilidad del motor sin él.
Véase también
Referencias
- ^ "Carakan". Archivado desde el original el 31 de mayo de 2009. Consultado el 9 de julio de 2009 .
- ^ "Blog del equipo de escritorio de Opera | Opera". Archivado desde el original el 3 de marzo de 2006.
- ^ "Dev.Opera — Blog". dev.opera.com .
- ^ Preguntas frecuentes, Microsoft , 13 de marzo de 2010, archivado desde el original el 22 de marzo de 2010 , consultado el 18 de marzo de 2010
- ^ "Targeting Edge vs. Legacy Engines in JsRT APIs" (Comparación de motores Edge y motores heredados en las API de JsRT) . Consultado el 10 de septiembre de 2015 .
- ^ "JavaScriptCore-WebKit".
- ^ "Oracle Nashorn: un motor JavaScript de próxima generación para la JVM".
- ^ "Constelación/iv". GitHub . Consultado el 15 de noviembre de 2015 .
- ^ "CL-JavaScript" . Consultado el 14 de septiembre de 2018 .
- ^ "Apóyame". GitHub . 18 de noviembre de 2021.
- ^ "Usando Hermes". Facebook . Consultado el 9 de abril de 2021 .
- ^ "Especificación del lenguaje ECMAScript 2015 – ECMA-262 6.ª edición".
- ^ "Una máquina virtual ES6 creada con JavaScript". Archivado desde el original el 2012-12-03 . Consultado el 2012-12-01 .
- ^ "V4 - Wiki Qt". wiki.qt.io. Consultado el 24 de abril de 2021 .
- ^ "Especificación del lenguaje ECMAScript, edición ECMA-262 5.1" (PDF) . Ecma International. Junio de 2011. Archivado desde el original (PDF) el 2015-04-12 . Consultado el 2012-01-31 .
- ^ "YAJI: Yet Another JavaScript Interpreter". Código de Google . Consultado el 31 de enero de 2012 .
- ^ "FESI". Septiembre de 2003. Archivado desde el original el 6 de septiembre de 2012. Consultado el 6 de agosto de 2012 .
- ^ "El microvio es muy pequeño". 11 de junio de 2022. Consultado el 23 de agosto de 2022 .
- ^ "Duktape" . Consultado el 21 de septiembre de 2013 .
- ^ "moddable/documentation/xs/XS Conformance.md en público". GitHub .
- ^ "Aplicaciones para IoT". Archivado desde el original el 28 de diciembre de 2018.
- ^ "Xs7 @ Tc-39".
- ^ "Jsish" . Consultado el 30 de abril de 2014 .
- ^ "MuJS" . Consultado el 22 de septiembre de 2014 .
- ^ "NGINX JavaScript en la configuración de su servidor web". YouTube . Archivado desde el original el 2021-12-13 . Consultado el 2018-10-30 .
- ^ "Construyamos un motor de JavaScript". 2019.jsconf.eu . Consultado el 23 de marzo de 2022 .
- ^ "GitHub - boa-dev/boa: Boa es un motor de Javascript integrable y experimental escrito en Rust". github.com . Consultado el 8 de abril de 2022 .
- ^ Clark, Mitchell (18 de agosto de 2022). "El telescopio espacial James Webb ejecuta JavaScript, aparentemente". The Verge . Consultado el 2 de septiembre de 2022 .
- ^ "Motor JavaScript LibJS". libjs.dev . Consultado el 30 de junio de 2023 .
- ^ "LibJS: eliminemos el intérprete AST :^) · LadybirdBrowser/ladybird@2eaa528". GitHub . Consultado el 10 de julio de 2024 .
- ^ Actualización del navegador Ladybird (febrero de 2024) , consultado el 18 de abril de 2024