Jump to content

List of ECMAScript engines: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Clarify the LibJS/JIT stuff, including a source.
No edit summary
 
(17 intermediate revisions by 9 users not shown)
Line 1: Line 1:
{{Short description|none}}
{{Short description|none}}
{{Multiple issues|
{{Multiple issues|
{{Context|date=August 2020}}
{{Overly detailed|date=August 2020}}
{{Overly detailed|date=August 2020}}
{{More citations needed|date=August 2020}}
{{More citations needed|date=August 2020}}
{{Cleanup bare URLs|date=August 2022}}

}}
}}
An [[ECMAScript engine]] is a program that executes source code written in a version of the [[ECMAScript]] language standard, for example, [[JavaScript]].
An [[ECMAScript engine]] is a software platform that can run code written in [[ECMAScript]], a programming language more commonly known as [[JavaScript]].

More formally, an ECMAScript engine is, at least in part, a "conforming implementation" of the ECMAScript programming language specified by the ECMA-262 international standard.<ref>https://tc39.es/ecma262/</ref>

Many implementations of ECMAScript engines are available, which differ based on the platforms they are intended to support, their level of conformance, and other implementation-specific characteristics. This article attempts to provide a relatively comprehensive list of engines that execute ECMAScript code.

The uses of the listed engines vary widely; some of these are engines intended for browsers that can run ECMAScript code on websites that include ECMAScript, like [[V8 (JavaScript engine)|V8]] (used in both [[Google Chrome]] and [[Node.js]]) and [[SpiderMonkey]]; some are intended for specific platforms (like [[Tamarin (software)|Tamarin]], [[Espruino]], [[Rhino (JavaScript engine)|Rhino]], [[Nashorn (JavaScript engine)|Nashorn]], and [[GraalVM|GraalJS]]).


== Just-in-time compilation engines ==
== Just-in-time compilation engines ==
These are new generation ECMAScript engines for web browsers, all implementing [[just-in-time compilation]] (JIT) or variations of that idea. The performance benefits for just-in-time compilation make it much more suitable for web applications written in [[JavaScript]].
These are new generation ECMAScript engines for web browsers, all implementing [[just-in-time compilation]] (JIT) or variations of that idea. The performance benefits for just-in-time compilation make it much more suitable for web applications written in [[JavaScript]].


* [[Carakan (script engine)|Carakan]]: A JavaScript engine developed by [[Opera Software ASA]], included in the [[History of the Opera web browser#Version 10|10.50]] release of the [[Opera (web browser)|Opera]] web browser, until switching to [[V8 (JavaScript engine)|V8]] with Opera 15 (released in 2013).<ref>{{Cite web |url=http://labs.opera.com/news/2009/02/05/ |title=Carakan |access-date=2009-07-09 |archive-url=https://web.archive.org/web/20090531095136/http://labs.opera.com/news/2009/02/05/ |archive-date=2009-05-31 |url-status=dead }}</ref><ref>{{Cite web|url=http://my.opera.com/desktopteam/blog/|archive-url = https://web.archive.org/web/20060303160759/http://my.opera.com/desktopteam/blog/|archive-date = 2006-03-03|title = Opera Desktop Team's Blog &#124; Opera}}</ref><ref>{{Cite web|url=http://my.opera.com/ODIN/blog/300-million-users-and-move-to-webkit|title=Dev.Opera — Blog}}</ref><ref>{{Cite web|url=http://my.opera.com/ODIN/blog/opera-14-for-android-is-out|title=Dev.Opera — Blog}}</ref>
* [[Carakan (script engine)|Carakan]]: A JavaScript engine developed by [[Opera Software ASA]], included in the [[History of the Opera web browser#Version 10|10.50]] release of the [[Opera (web browser)|Opera]] web browser, until switching to [[V8 (JavaScript engine)|V8]] with Opera 15 (released in 2013).<ref>{{Cite web |url=http://labs.opera.com/news/2009/02/05/ |title=Carakan |access-date=2009-07-09 |archive-url=https://web.archive.org/web/20090531095136/http://labs.opera.com/news/2009/02/05/ |archive-date=2009-05-31 |url-status=dead }}</ref><ref>{{Cite web|url=http://my.opera.com/desktopteam/blog/|archive-url = https://web.archive.org/web/20060303160759/http://my.opera.com/desktopteam/blog/|archive-date = 2006-03-03|title = Opera Desktop Team's Blog &#124; Opera}}</ref><ref name="auto">{{Cite web|url=https://dev.opera.com/blog/|title=Dev.Opera — Blog|website=dev.opera.com}}</ref>
* [[Chakra (JScript engine)|Chakra (JScript9)]]: A [[JScript]] engine used in [[Internet Explorer]]. It was first previewed at [[MIX (Microsoft)#MIX 10|MIX 10]] as part of the Internet Explorer 9 Platform Preview.<ref>{{citation |url=http://ie.microsoft.com/testdrive/info/FrequentlyAskedQuestions/Default.html |title=Frequently Asked Questions |date=2010-03-13 |access-date=2010-03-18 |publisher=[[Microsoft]] |archive-url=https://web.archive.org/web/20100322193213/http://ie.microsoft.com/testdrive/info/FrequentlyAskedQuestions/Default.html |archive-date=2010-03-22 |url-status=dead }}</ref>
* [[Chakra (JScript engine)|Chakra (JScript9)]]: A [[JScript]] engine used in [[Internet Explorer]]. It was first previewed at [[MIX (Microsoft)#MIX 10|MIX 10]] as part of the Internet Explorer 9 Platform Preview.<ref>{{citation |url=http://ie.microsoft.com/testdrive/info/FrequentlyAskedQuestions/Default.html |title=Frequently Asked Questions |date=2010-03-13 |access-date=2010-03-18 |publisher=[[Microsoft]] |archive-url=https://web.archive.org/web/20100322193213/http://ie.microsoft.com/testdrive/info/FrequentlyAskedQuestions/Default.html |archive-date=2010-03-22 |url-status=dead }}</ref>
* [[Chakra (JavaScript engine)|Chakra]]: A [[JavaScript]] engine previously used in older versions of [[Microsoft Edge]], before being replaced by V8.<ref>{{cite web|title=Targeting Edge vs. Legacy Engines in JsRT APIs|url=https://msdn.microsoft.com/en-us/library/dn903710(v=vs.94).aspx|access-date=10 September 2015}}</ref>
* [[Chakra (JavaScript engine)|Chakra]]: A [[JavaScript]] engine previously used in older versions of [[Microsoft Edge]], before being replaced by V8.<ref>{{cite web|title=Targeting Edge vs. Legacy Engines in JsRT APIs|url=https://msdn.microsoft.com/en-us/library/dn903710(v=vs.94).aspx|access-date=10 September 2015}}</ref>
Line 46: Line 49:
* Microvium: JavaScript engine for microcontrollers, supporting a restricted subset of the ECMAScript specification, using less than 16{{nbsp}}kB of flash memory and 64{{nbsp}}B of RAM while idle.<ref>{{cite web |title=Microvium is very small |date=11 June 2022 |url=https://coder-mike.com/blog/2022/06/11/microvium-is-very-small/ |access-date=23 August 2022}}</ref>
* Microvium: JavaScript engine for microcontrollers, supporting a restricted subset of the ECMAScript specification, using less than 16{{nbsp}}kB of flash memory and 64{{nbsp}}B of RAM while idle.<ref>{{cite web |title=Microvium is very small |date=11 June 2022 |url=https://coder-mike.com/blog/2022/06/11/microvium-is-very-small/ |access-date=23 August 2022}}</ref>
* Duktape: A small footprint, easily embeddable Ecmascript E5/E5.1 engine.<ref>{{cite web |url=http://www.duktape.org/ |title=Duktape |access-date=2013-09-21}}</ref>
* Duktape: A small footprint, easily embeddable Ecmascript E5/E5.1 engine.<ref>{{cite web |url=http://www.duktape.org/ |title=Duktape |access-date=2013-09-21}}</ref>
* XS JavaScript Engine: An ECMAScript 2020-compliant engine for microcontrollers with limited resources.<ref>https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/xs/XS%20Conformance.md#results</ref><ref>{{cite web |url=https://www.moddable.com/faq.php#what-is-xs |url-status=dead |archive-url=https://web.archive.org/web/20181228063939/http://www.moddable.com/faq.php |archive-date=2018-12-28 |title=Apps for IoT}}</ref> XS is maintained by Moddable as part of the Moddable SDK and was formerly part of the [[Kinoma|Kinoma Platform]].<ref>{{cite web | url=https://www.moddable.com/XS7-TC-39 | title=Xs7 @ Tc-39 }}</ref>
* XS JavaScript Engine: An ECMAScript 2020-compliant engine for microcontrollers with limited resources.<ref>{{Cite web |title=moddable/documentation/xs/XS Conformance.md at public |url=https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/xs/XS%20Conformance.md#results |website=[[GitHub]]}}</ref><ref>{{cite web |url=https://www.moddable.com/faq.php#what-is-xs |url-status=dead |archive-url=https://web.archive.org/web/20181228063939/http://www.moddable.com/faq.php |archive-date=2018-12-28 |title=Apps for IoT}}</ref> XS is maintained by Moddable as part of the Moddable SDK and was formerly part of the [[Kinoma|Kinoma Platform]].<ref>{{cite web | url=https://www.moddable.com/XS7-TC-39 | title=Xs7 @ Tc-39 }}</ref>
* [[Jsish]]: An ES5.1 subset interpreter with builtin SQLite, JSON, WebSocket, and ZVFS support.<ref>{{cite web |url=http://jsish.org/ |title=Jsish |access-date=2014-04-30}}</ref>
* Jsish: An ES5.1 subset interpreter with builtin SQLite, JSON, WebSocket, and ZVFS support.<ref>{{cite web |url=http://jsish.org/ |title=Jsish |access-date=2014-04-30}}</ref>
* [[Espruino]]: A very small footprint interpreter specifically for [[microcontroller]]s. Can run in less than 8&nbsp;kB of RAM by executing from source (rather than [[bytecode]]).
* [[Espruino]]: A very small footprint interpreter specifically for [[microcontroller]]s. Can run in less than 8&nbsp;kB of RAM by executing from source (rather than [[bytecode]]).
* MuJS: A lightweight ECMAScript interpreter library, designed for embedding in other software to extend them with scripting capabilities. Originally developed for [[MuPDF]].<ref>{{cite web |url=http://mujs.com/ |title=MuJS |access-date=2014-09-22}}</ref>
* MuJS: A lightweight ECMAScript interpreter library, designed for embedding in other software to extend them with scripting capabilities. Originally developed for [[MuPDF]].<ref>{{cite web |url=http://mujs.com/ |title=MuJS |access-date=2014-09-22}}</ref>
Line 54: Line 57:
* JerryScript: A lightweight JavaScript engine by Samsung for microcontrollers with less than 64&nbsp;KB RAM.
* JerryScript: A lightweight JavaScript engine by Samsung for microcontrollers with less than 64&nbsp;KB RAM.
* njs: A lightweight JavaScript interpreter optimized for web server scripting and fastest VM context creation; used in [[nginx]].<ref>{{cite web |url=https://www.youtube.com/watch?v=Jc_L6UffFOs |archive-url=https://ghostarchive.org/varchive/youtube/20211213/Jc_L6UffFOs |archive-date=2021-12-13 |url-status=live|title=NGINX JavaScript in Your Web Server Configuration |website=[[YouTube]] |access-date=2018-10-30}}{{cbignore}}</ref>
* njs: A lightweight JavaScript interpreter optimized for web server scripting and fastest VM context creation; used in [[nginx]].<ref>{{cite web |url=https://www.youtube.com/watch?v=Jc_L6UffFOs |archive-url=https://ghostarchive.org/varchive/youtube/20211213/Jc_L6UffFOs |archive-date=2021-12-13 |url-status=live|title=NGINX JavaScript in Your Web Server Configuration |website=[[YouTube]] |access-date=2018-10-30}}{{cbignore}}</ref>
* {{anchor|QuickJS}}QuickJS: A lightweight ECMAScript 6 interpreter by [[Fabrice Bellard]] and Charlie Gordon.
* [https://bellard.org/quickjs/ {{anchor|QuickJS}}QuickJS]: A lightweight ECMAScript 6 interpreter by [[Fabrice Bellard]] and Charlie Gordon.
* engine262: A JavaScript engine written in JavaScript for development and exploration. It is primarily used to validate the ECMAScript specification.
* engine262: A JavaScript engine written in JavaScript for development and exploration. It is primarily used to validate the ECMAScript specification.
* Boa: A JavaScript engine written in [[Rust (programming language)|Rust]].<ref>
* [[Boa_(JavaScript_engine)|Boa]]: A JavaScript engine written in [[Rust (programming language)|Rust]].<ref>
{{Cite web |title=Let's build a JavaScript Engine |url=https://2019.jsconf.eu/jason-williams/lets-build-a-javascript-engine.html |access-date=2022-03-23 |website=2019.jsconf.eu |language=en}}</ref><ref>{{Cite web |title=GitHub - boa-dev/boa: Boa is an embeddable and experimental Javascript engine written in Rust. |url=https://github.com/boa-dev/boa |access-date=2022-04-08 |website=github.com |language=en}}</ref>
{{Cite web |title=Let's build a JavaScript Engine |url=https://2019.jsconf.eu/jason-williams/lets-build-a-javascript-engine.html |access-date=2022-03-23 |website=2019.jsconf.eu |language=en}}</ref><ref>{{Cite web |title=GitHub - boa-dev/boa: Boa is an embeddable and experimental Javascript engine written in Rust. |url=https://github.com/boa-dev/boa |access-date=2022-04-08 |website=github.com |language=en}}</ref>
*ScriptEase: an old proprietary engine last updated in 2003. Only notable for its use in the [[James Webb Space Telescope]].<ref>{{Cite web |last=Clark |first=Mitchell |date=2022-08-18 |title=The James Webb Space Telescope runs JavaScript, apparently |url=https://www.theverge.com/2022/8/18/23206110/james-webb-space-telescope-javascript-jwst-instrument-control |access-date=2022-09-02 |website=The Verge |language=en}}</ref>
*ScriptEase: an old proprietary engine last updated in 2003. Only notable for its use in the [[James Webb Space Telescope]].<ref>{{Cite web |last=Clark |first=Mitchell |date=2022-08-18 |title=The James Webb Space Telescope runs JavaScript, apparently |url=https://www.theverge.com/2022/8/18/23206110/james-webb-space-telescope-javascript-jwst-instrument-control |access-date=2022-09-02 |website=The Verge |language=en}}</ref>
*LibJS: JavaScript engine of the SerenityOS project.<ref>{{Cite web |title=LibJS JavaScript engine |url=https://libjs.dev/ |access-date=2023-06-30 |website=libjs.dev}}</ref> Initially it was only an AST interpreter, but has in parallel developed a byte code generator and interpreter. As of June 30th 2023 the byte code runtime is close to feature parity, and scored 86.4% on the test262 test suite.<ref>{{Citation |title=Ladybird browser update (June 2023) |url=https://www.youtube.com/watch?v=xdVOdrWuzLQ |access-date=2023-06-30 |language=en}}</ref> At some point, the developer [[Andreas Kling]] was working on porting it to [[Just-in-time compilation]], but he later changed his mind<ref>{{Citation |title=Ladybird browser update (February 2024) |url=https://www.youtube.com/watch?v=dKHopzDtElY |access-date=2024-04-18 |language=en}}</ref>, citing development/debugging issues while also saying that he is interested to see how far utility and usability of the engine can go without it.
*LibJS: JavaScript engine of the [[SerenityOS]] and [[Ladybird (web browser) |Ladybird]] projects.<ref>{{Cite web |title=LibJS JavaScript engine |url=https://libjs.dev/ |access-date=2023-06-30 |website=libjs.dev}}</ref> Initially it was an AST interpreter, but has been upgraded to a bytecode-based one.<ref>{{Cite web |title=LibJS: Rip out the AST interpreter :^) · LadybirdBrowser/ladybird@2eaa528 |url=https://github.com/LadybirdBrowser/ladybird/commit/2eaa528a0ea606b2be9a1868ba711b1987409d70 |access-date=2024-07-10 |website=GitHub |language=en}}</ref> At some point, the lead developer Andreas Kling added [[just-in-time compilation]] (for x86-64 architecture), but he later changed his mind and removed the mechanism,<ref>{{Citation |title=Ladybird browser update (February 2024) |url=https://www.youtube.com/watch?v=dKHopzDtElY |access-date=2024-04-18 |language=en}}</ref> citing development/debugging issues while also saying that he is interested to see how far utility and usability of the engine can go without it.


==See also==
==See also==

Latest revision as of 12:28, 31 October 2024

An ECMAScript engine is a software platform that can run code written in ECMAScript, a programming language more commonly known as JavaScript.

More formally, an ECMAScript engine is, at least in part, a "conforming implementation" of the ECMAScript programming language specified by the ECMA-262 international standard.[1]

Many implementations of ECMAScript engines are available, which differ based on the platforms they are intended to support, their level of conformance, and other implementation-specific characteristics. This article attempts to provide a relatively comprehensive list of engines that execute ECMAScript code.

The uses of the listed engines vary widely; some of these are engines intended for browsers that can run ECMAScript code on websites that include ECMAScript, like V8 (used in both Google Chrome and Node.js) and SpiderMonkey; some are intended for specific platforms (like Tamarin, Espruino, Rhino, Nashorn, and GraalJS).

Just-in-time compilation engines

[edit]

These are new generation ECMAScript engines for web browsers, all implementing just-in-time compilation (JIT) or variations of that idea. The performance benefits for just-in-time compilation make it much more suitable for web applications written in JavaScript.

Runtime interpreter engines

[edit]

The following engines use runtime interpreters, which do not compile into native machine code and generally run more slowly:

  • Continuum: A self-interpreter that supports older drafts of the ECMAScript 2015 specification.[13] Uniquely, the engine is implemented in ECMAScript 3, which made it possible to run ES2015 in browsers as old as IE6.[14]
  • Futhark: The ECMAScript engine of the Opera web browser versions 9.50 to 10.10.
  • InScript: An obsolete proprietary library used for iCab 2 and 3.
  • JScript: The engine that is used in Internet Explorer for versions up to IE9, and one component of the MSHTML (Trident) browser engine.
  • Jint: Javascript interpreter with integrated engine for .NET
  • KJS: The engine used in Konqueror, and one component of KHTML, a predecessor to JavaScriptCore.
  • Linear B: The ECMAScript engine of the Opera web browser versions 7.0 to 9.50, exclusive.
  • Narcissus: JavaScript implemented in JavaScript (a meta-circular evaluator), intended to run in another JavaScript engine, of theoretical and educational nature only.
  • JS-Interpreter A lightweight JavaScript interpreter implemented in JavaScript with step-by-step execution.
  • QtScript: Originally developed by Trolltech, now owned by The Qt Company. It provides QObject integration with JavaScriptCore.
  • V4 (QJSEngine): Qt's newer ECMAScript engine, powering QML and QtQuick. ES6-compliant and under active development at The Qt Company. V4 is JIT compiled.[15]
  • Rhino: One of several JavaScript engines from Mozilla, using the Java platform.
  • YAJI: An ECMAScript engine based on the FESI implementation by Jean-Marc Lugrin in 1999, using the Java platform, currently being developed to support the latest standards (ECMAScript spec. 262, v5.1).[16][17][18]
  • Microvium: JavaScript engine for microcontrollers, supporting a restricted subset of the ECMAScript specification, using less than 16 kB of flash memory and 64 B of RAM while idle.[19]
  • Duktape: A small footprint, easily embeddable Ecmascript E5/E5.1 engine.[20]
  • XS JavaScript Engine: An ECMAScript 2020-compliant engine for microcontrollers with limited resources.[21][22] XS is maintained by Moddable as part of the Moddable SDK and was formerly part of the Kinoma Platform.[23]
  • Jsish: An ES5.1 subset interpreter with builtin SQLite, JSON, WebSocket, and ZVFS support.[24]
  • Espruino: A very small footprint interpreter specifically for microcontrollers. Can run in less than 8 kB of RAM by executing from source (rather than bytecode).
  • MuJS: A lightweight ECMAScript interpreter library, designed for embedding in other software to extend them with scripting capabilities. Originally developed for MuPDF.[25]
  • mJS: Restricted JavaScript engine. Used for Internet of Things (IoT).
  • Tiny-JS: A minimal JavaScript interpreter written in C++.
  • JerryScript: A lightweight JavaScript engine by Samsung for microcontrollers with less than 64 KB RAM.
  • njs: A lightweight JavaScript interpreter optimized for web server scripting and fastest VM context creation; used in nginx.[26]
  • QuickJS: A lightweight ECMAScript 6 interpreter by Fabrice Bellard and Charlie Gordon.
  • engine262: A JavaScript engine written in JavaScript for development and exploration. It is primarily used to validate the ECMAScript specification.
  • Boa: A JavaScript engine written in Rust.[27][28]
  • ScriptEase: an old proprietary engine last updated in 2003. Only notable for its use in the James Webb Space Telescope.[29]
  • LibJS: JavaScript engine of the SerenityOS and Ladybird projects.[30] Initially it was an AST interpreter, but has been upgraded to a bytecode-based one.[31] At some point, the lead developer Andreas Kling added just-in-time compilation (for x86-64 architecture), but he later changed his mind and removed the mechanism,[32] citing development/debugging issues while also saying that he is interested to see how far utility and usability of the engine can go without it.

See also

[edit]

References

[edit]
  1. ^ https://tc39.es/ecma262/
  2. ^ "Carakan". Archived from the original on 2009-05-31. Retrieved 2009-07-09.
  3. ^ "Opera Desktop Team's Blog | Opera". Archived from the original on 2006-03-03.
  4. ^ "Dev.Opera — Blog". dev.opera.com.
  5. ^ Frequently Asked Questions, Microsoft, 2010-03-13, archived from the original on 2010-03-22, retrieved 2010-03-18
  6. ^ "Targeting Edge vs. Legacy Engines in JsRT APIs". Retrieved 10 September 2015.
  7. ^ "JavaScriptCore – WebKit".
  8. ^ "Oracle Nashorn: A Next-Generation JavaScript Engine for the JVM".
  9. ^ "Constellation/iv". GitHub. Retrieved 2015-11-15.
  10. ^ "CL-JavaScript". Retrieved 2018-09-14.
  11. ^ "Support me". GitHub. 18 November 2021.
  12. ^ "Using Hermes". Facebook. Retrieved 9 April 2021.
  13. ^ "ECMAScript 2015 Language Specification – ECMA-262 6th Edition".
  14. ^ "An ES6 Virtual Machine Built in JavaScript". Archived from the original on 2012-12-03. Retrieved 2012-12-01.
  15. ^ "V4 - Qt Wiki". wiki.qt.io. Retrieved 2021-04-24.
  16. ^ "ECMAScript Language Specification ECMA-262 5.1 edition" (PDF). Ecma International. June 2011. Archived from the original (PDF) on 2015-04-12. Retrieved 2012-01-31.
  17. ^ "YAJI: Yet Another JavaScript Interpreter". Google Code. Retrieved 2012-01-31.
  18. ^ "FESI". September 2003. Archived from the original on 2012-09-06. Retrieved 2012-08-06.
  19. ^ "Microvium is very small". 11 June 2022. Retrieved 23 August 2022.
  20. ^ "Duktape". Retrieved 2013-09-21.
  21. ^ "moddable/documentation/xs/XS Conformance.md at public". GitHub.
  22. ^ "Apps for IoT". Archived from the original on 2018-12-28.
  23. ^ "Xs7 @ Tc-39".
  24. ^ "Jsish". Retrieved 2014-04-30.
  25. ^ "MuJS". Retrieved 2014-09-22.
  26. ^ "NGINX JavaScript in Your Web Server Configuration". YouTube. Archived from the original on 2021-12-13. Retrieved 2018-10-30.
  27. ^ "Let's build a JavaScript Engine". 2019.jsconf.eu. Retrieved 2022-03-23.
  28. ^ "GitHub - boa-dev/boa: Boa is an embeddable and experimental Javascript engine written in Rust". github.com. Retrieved 2022-04-08.
  29. ^ Clark, Mitchell (2022-08-18). "The James Webb Space Telescope runs JavaScript, apparently". The Verge. Retrieved 2022-09-02.
  30. ^ "LibJS JavaScript engine". libjs.dev. Retrieved 2023-06-30.
  31. ^ "LibJS: Rip out the AST interpreter :^) · LadybirdBrowser/ladybird@2eaa528". GitHub. Retrieved 2024-07-10.
  32. ^ Ladybird browser update (February 2024), retrieved 2024-04-18