List of ECMAScript engines: Difference between revisions
Akib Azmain (talk | contribs) →ECMAScript Engines: GNU Guile has a JIT compiler |
No edit summary |
||
(43 intermediate revisions by 29 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}} |
||
}} |
}} |
||
An |
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> |
|||
== ECMAScript Engines == |
|||
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]]). |
|||
⚫ | |||
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 (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 | 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 used in [[Microsoft Edge]].<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> |
||
* [[SpiderMonkey]]: A JavaScript engine in Mozilla [[Gecko (software)|Gecko]] applications, including [[Mozilla Firefox|Firefox]]. The engine currently includes the IonMonkey compiler and OdinMonkey optimization module, has previously included the TraceMonkey compiler (first |
* [[SpiderMonkey]]: A JavaScript engine in Mozilla [[Gecko (software)|Gecko]] applications, including [[Mozilla Firefox|Firefox]]. The engine currently includes the IonMonkey compiler and OdinMonkey optimization module, has previously included the TraceMonkey compiler (first JavaScript JIT) and JägerMonkey. |
||
* [[JavaScriptCore]]: A JavaScript interpreter and JIT originally derived from [[KJS (software)|KJS]]. It is used in the [[WebKit]] project and applications such as [[Safari (web browser)|Safari]]. Also known as Nitro, SquirrelFish, and SquirrelFish Extreme.<ref>{{Cite web|url=http://trac.webkit.org/wiki/JavaScriptCore|title=JavaScriptCore – WebKit}}</ref> |
* [[JavaScriptCore]]: A JavaScript interpreter and JIT originally derived from [[KJS (software)|KJS]]. It is used in the [[WebKit]] project and applications such as [[Safari (web browser)|Safari]]. Also known as Nitro, SquirrelFish, and SquirrelFish Extreme.<ref>{{Cite web|url=http://trac.webkit.org/wiki/JavaScriptCore|title=JavaScriptCore – WebKit}}</ref> |
||
* [[JScript .NET]]: A [[.NET Framework]] [[JScript]] engine used in [[ASP.NET]] based on [[Common Language Runtime]] and [[COM Interop]]. |
* [[JScript .NET]]: A [[.NET Framework]] [[JScript]] engine used in [[ASP.NET]] based on [[Common Language Runtime]] and [[COM Interop]]. Support was dropped with [[.NET Core]] and [[CoreCLR]] so its future looks questionable for [[ASP.NET Core]]. |
||
* [[Tamarin (software)|Tamarin]]: An [[ActionScript]] and ECMAScript engine used in [[Adobe Flash]]. |
* [[Tamarin (software)|Tamarin]]: An [[ActionScript]] and ECMAScript engine used in [[Adobe Flash]]. |
||
* [[V8 (JavaScript engine)|V8]]: A JavaScript engine used in [[Google Chrome]] and other [[Chromium (web browser)|Chromium]]-based browsers, [[Node.js]], [[Deno (software)|Deno]], and V8.NET. |
* [[V8 (JavaScript engine)|V8]]: A JavaScript engine used in [[Google Chrome]] and other [[Chromium (web browser)|Chromium]]-based browsers, [[Node.js]], [[Deno (software)|Deno]], and V8.NET. |
||
Line 25: | Line 28: | ||
* CL-JavaScript: Can compile JavaScript to machine language on Common Lisp implementations that compile to machine language.<ref>{{cite web|url=http://marijnhaverbeke.nl/cl-javascript/|title=CL-JavaScript|access-date=2018-09-14}}</ref> |
* CL-JavaScript: Can compile JavaScript to machine language on Common Lisp implementations that compile to machine language.<ref>{{cite web|url=http://marijnhaverbeke.nl/cl-javascript/|title=CL-JavaScript|access-date=2018-09-14}}</ref> |
||
* BESEN: A complete JIT-compiling implementation of ECMAScript Fifth Edition written in Object Pascal.<ref>{{Cite web|url=https://github.com/BeRo1985/besen|title=Support me|website=[[GitHub]]|date=18 November 2021}}</ref> |
* BESEN: A complete JIT-compiling implementation of ECMAScript Fifth Edition written in Object Pascal.<ref>{{Cite web|url=https://github.com/BeRo1985/besen|title=Support me|website=[[GitHub]]|date=18 November 2021}}</ref> |
||
* Hermes: developed by [[Facebook]] for [[React Native]] mobile apps<ref>{{cite web |title=Using Hermes |url=https://reactnative.dev/docs/hermes |publisher=Facebook |access-date=9 April 2021}}</ref> |
* Hermes: developed by [[Facebook]] for [[React Native]] mobile apps<ref>{{cite web |title=Using Hermes |url=https://reactnative.dev/docs/hermes |publisher=Facebook |access-date=9 April 2021}}</ref> Can also be used independent from React Native. |
||
* Graal.js: An ECMAScript compliant JavaScript engine for [[GraalVM]] which supports language interoperability that can also execute Node.js applications. |
* Graal.js: An ECMAScript compliant JavaScript engine for [[GraalVM]] which supports language interoperability that can also execute Node.js applications. |
||
== Runtime interpreter engines == |
|||
The following engines use runtime interpreters, which do not compile into native machine code and generally run more slowly: |
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.<ref>http://www.ecma-international.org/ecma-262/6.0/</ref> Uniquely, the engine is implemented in ECMAScript 3, which made it possible to run ES2015 in browsers as old as IE6.<ref>{{cite web |url=https://benvie.github.com/continuum/ |title=An ES6 Virtual Machine Built in JavaScript |access-date=2012-12-01 |archive-url=https://web.archive.org/web/20121203041426/http://benvie.github.com/continuum/ |archive-date=2012-12-03 |url-status=dead }}</ref> |
* Continuum: A [[self-interpreter]] that supports older drafts of the ECMAScript 2015 specification.<ref>{{cite web | url=http://www.ecma-international.org/ecma-262/6.0/ | title=ECMAScript 2015 Language Specification – ECMA-262 6th Edition }}</ref> Uniquely, the engine is implemented in ECMAScript 3, which made it possible to run ES2015 in browsers as old as IE6.<ref>{{cite web |url=https://benvie.github.com/continuum/ |title=An ES6 Virtual Machine Built in JavaScript |access-date=2012-12-01 |archive-url=https://web.archive.org/web/20121203041426/http://benvie.github.com/continuum/ |archive-date=2012-12-03 |url-status=dead }}</ref> |
||
* [[Futhark (script engine)|Futhark]]: The ECMAScript engine of the [[Opera (web browser)|Opera]] web browser versions 9.50 to 10.10. |
* [[Futhark (script engine)|Futhark]]: The ECMAScript engine of the [[Opera (web browser)|Opera]] web browser versions 9.50 to 10.10. |
||
* [[InScript (JavaScript engine)|InScript]]: An obsolete [[proprietary software|proprietary]] library used for [[iCab]] 2 and 3. |
* [[InScript (JavaScript engine)|InScript]]: An obsolete [[proprietary software|proprietary]] library used for [[iCab]] 2 and 3. |
||
Line 44: | Line 47: | ||
* [[Rhino (JavaScript engine)|Rhino]]: One of several JavaScript engines from [[Mozilla]], using the [[Java (software platform)|Java platform]]. |
* [[Rhino (JavaScript engine)|Rhino]]: One of several JavaScript engines from [[Mozilla]], using the [[Java (software platform)|Java platform]]. |
||
* YAJI: An ECMAScript engine based on the FESI implementation by Jean-Marc Lugrin in 1999, using the [[Java (software platform)|Java platform]], currently being developed to support the latest standards (ECMAScript spec. 262, v5.1).<ref>{{cite web |url=http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf |title=ECMAScript Language Specification ECMA-262 5.1 edition |date=June 2011 |publisher=Ecma International |access-date=2012-01-31 |archive-url=https://web.archive.org/web/20150412040502/http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf |archive-date=2015-04-12 |url-status=dead }}</ref><ref>{{cite web |url=http://code.google.com/p/yaji-ecmascript-interpreter/ |title=YAJI: Yet Another JavaScript Interpreter |work=Google Code |access-date=2012-01-31}}</ref><ref>{{cite web|url=http://www.lugrin.ch/fesi|title=FESI|date=September 2003|access-date=2012-08-06|archive-url=https://web.archive.org/web/20120906033028/http://www.lugrin.ch/fesi/|archive-date=2012-09-06|url-status=dead}}</ref> |
* YAJI: An ECMAScript engine based on the FESI implementation by Jean-Marc Lugrin in 1999, using the [[Java (software platform)|Java platform]], currently being developed to support the latest standards (ECMAScript spec. 262, v5.1).<ref>{{cite web |url=http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf |title=ECMAScript Language Specification ECMA-262 5.1 edition |date=June 2011 |publisher=Ecma International |access-date=2012-01-31 |archive-url=https://web.archive.org/web/20150412040502/http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf |archive-date=2015-04-12 |url-status=dead }}</ref><ref>{{cite web |url=http://code.google.com/p/yaji-ecmascript-interpreter/ |title=YAJI: Yet Another JavaScript Interpreter |work=Google Code |access-date=2012-01-31}}</ref><ref>{{cite web|url=http://www.lugrin.ch/fesi|title=FESI|date=September 2003|access-date=2012-08-06|archive-url=https://web.archive.org/web/20120906033028/http://www.lugrin.ch/fesi/|archive-date=2012-09-06|url-status=dead}}</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>https://www.moddable.com/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> |
||
* Websocket.js: An embeddable Javascript engine with HTTP/Websocket support.<ref>{{cite web |url=https://github.com/cesanta/websocket.js/ |title=Websocket.js |website=[[GitHub]] |access-date=2014-07-16}}</ref> |
|||
* [[Espruino]]: A very small footprint interpreter specifically for [[microcontroller]]s. Can run in less than 8 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 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 KB RAM. |
* 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]].<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> |
||
* 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 - |
{{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> |
|||
</ref> |
|||
*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== |
||
* [[Comparison of JavaScript engines]] |
|||
* [[JavaScript engine]] |
* [[JavaScript engine]] |
||
* [[Comparison of application virtualization software]] |
* [[Comparison of application virtualization software]] |
Latest revision as of 12:28, 31 October 2024
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
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.
- Carakan: A JavaScript engine developed by Opera Software ASA, included in the 10.50 release of the Opera web browser, until switching to V8 with Opera 15 (released in 2013).[2][3][4]
- Chakra (JScript9): A JScript engine used in Internet Explorer. It was first previewed at MIX 10 as part of the Internet Explorer 9 Platform Preview.[5]
- Chakra: A JavaScript engine previously used in older versions of Microsoft Edge, before being replaced by V8.[6]
- SpiderMonkey: A JavaScript engine in Mozilla Gecko applications, including Firefox. The engine currently includes the IonMonkey compiler and OdinMonkey optimization module, has previously included the TraceMonkey compiler (first JavaScript JIT) and JägerMonkey.
- JavaScriptCore: A JavaScript interpreter and JIT originally derived from KJS. It is used in the WebKit project and applications such as Safari. Also known as Nitro, SquirrelFish, and SquirrelFish Extreme.[7]
- JScript .NET: A .NET Framework JScript engine used in ASP.NET based on Common Language Runtime and COM Interop. Support was dropped with .NET Core and CoreCLR so its future looks questionable for ASP.NET Core.
- Tamarin: An ActionScript and ECMAScript engine used in Adobe Flash.
- V8: A JavaScript engine used in Google Chrome and other Chromium-based browsers, Node.js, Deno, and V8.NET.
- GNU Guile features an ECMAScript interpreter as of version 1.9
- Nashorn: A JavaScript engine used in Oracle Java Development Kit (JDK) since version 8.[8]
- iv, ECMAScript Lexer / Parser / Interpreter / VM / method JIT written in C++.[9]
- CL-JavaScript: Can compile JavaScript to machine language on Common Lisp implementations that compile to machine language.[10]
- BESEN: A complete JIT-compiling implementation of ECMAScript Fifth Edition written in Object Pascal.[11]
- Hermes: developed by Facebook for React Native mobile apps[12] Can also be used independent from React Native.
- Graal.js: An ECMAScript compliant JavaScript engine for GraalVM which supports language interoperability that can also execute Node.js applications.
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]- ^ https://tc39.es/ecma262/
- ^ "Carakan". Archived from the original on 2009-05-31. Retrieved 2009-07-09.
- ^ "Opera Desktop Team's Blog | Opera". Archived from the original on 2006-03-03.
- ^ "Dev.Opera — Blog". dev.opera.com.
- ^ Frequently Asked Questions, Microsoft, 2010-03-13, archived from the original on 2010-03-22, retrieved 2010-03-18
- ^ "Targeting Edge vs. Legacy Engines in JsRT APIs". Retrieved 10 September 2015.
- ^ "JavaScriptCore – WebKit".
- ^ "Oracle Nashorn: A Next-Generation JavaScript Engine for the JVM".
- ^ "Constellation/iv". GitHub. Retrieved 2015-11-15.
- ^ "CL-JavaScript". Retrieved 2018-09-14.
- ^ "Support me". GitHub. 18 November 2021.
- ^ "Using Hermes". Facebook. Retrieved 9 April 2021.
- ^ "ECMAScript 2015 Language Specification – ECMA-262 6th Edition".
- ^ "An ES6 Virtual Machine Built in JavaScript". Archived from the original on 2012-12-03. Retrieved 2012-12-01.
- ^ "V4 - Qt Wiki". wiki.qt.io. Retrieved 2021-04-24.
- ^ "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.
- ^ "YAJI: Yet Another JavaScript Interpreter". Google Code. Retrieved 2012-01-31.
- ^ "FESI". September 2003. Archived from the original on 2012-09-06. Retrieved 2012-08-06.
- ^ "Microvium is very small". 11 June 2022. Retrieved 23 August 2022.
- ^ "Duktape". Retrieved 2013-09-21.
- ^ "moddable/documentation/xs/XS Conformance.md at public". GitHub.
- ^ "Apps for IoT". Archived from the original on 2018-12-28.
- ^ "Xs7 @ Tc-39".
- ^ "Jsish". Retrieved 2014-04-30.
- ^ "MuJS". Retrieved 2014-09-22.
- ^ "NGINX JavaScript in Your Web Server Configuration". YouTube. Archived from the original on 2021-12-13. Retrieved 2018-10-30.
- ^ "Let's build a JavaScript Engine". 2019.jsconf.eu. Retrieved 2022-03-23.
- ^ "GitHub - boa-dev/boa: Boa is an embeddable and experimental Javascript engine written in Rust". github.com. Retrieved 2022-04-08.
- ^ Clark, Mitchell (2022-08-18). "The James Webb Space Telescope runs JavaScript, apparently". The Verge. Retrieved 2022-09-02.
- ^ "LibJS JavaScript engine". libjs.dev. Retrieved 2023-06-30.
- ^ "LibJS: Rip out the AST interpreter :^) · LadybirdBrowser/ladybird@2eaa528". GitHub. Retrieved 2024-07-10.
- ^ Ladybird browser update (February 2024), retrieved 2024-04-18