List of ECMAScript engines

From Wikipedia the free encyclopedia

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