Software:List of ECMAScript engines

From HandWiki
Revision as of 07:24, 9 February 2024 by WikiGary (talk | contribs) (fix)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Short description: none

An ECMAScript engine is a program that executes source code written in a version of the ECMAScript language standard, for example, JavaScript.

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.

  • 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).[1][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]
  • 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:

  • 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 project.[30] 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.[31] The developer Andreas Kling has stated that he is interested to see how far utility and usability of the engine can be achieved without resorting to Just-in-time compilation, for complexity and security concerns.

See also

References

  1. "Carakan". http://labs.opera.com/news/2009/02/05/. 
  2. "Opera Desktop Team's Blog | Opera". http://my.opera.com/desktopteam/blog/. 
  3. "Dev.Opera — Blog". http://my.opera.com/ODIN/blog/300-million-users-and-move-to-webkit. 
  4. "Dev.Opera — Blog". http://my.opera.com/ODIN/blog/opera-14-for-android-is-out. 
  5. Frequently Asked Questions, Microsoft, 2010-03-13, http://ie.microsoft.com/testdrive/info/FrequentlyAskedQuestions/Default.html, retrieved 2010-03-18 
  6. "Targeting Edge vs. Legacy Engines in JsRT APIs". https://msdn.microsoft.com/en-us/library/dn903710(v=vs.94).aspx. 
  7. "JavaScriptCore – WebKit". http://trac.webkit.org/wiki/JavaScriptCore. 
  8. "Oracle Nashorn: A Next-Generation JavaScript Engine for the JVM". http://www.oracle.com/technetwork/articles/java/jf14-nashorn-2126515.html. 
  9. "Constellation/iv". https://github.com/Constellation/iv. 
  10. "CL-JavaScript". http://marijnhaverbeke.nl/cl-javascript/. 
  11. "Support me". 18 November 2021. https://github.com/BeRo1985/besen. 
  12. "Using Hermes". Facebook. https://reactnative.dev/docs/hermes. 
  13. "ECMAScript 2015 Language Specification – ECMA-262 6th Edition". http://www.ecma-international.org/ecma-262/6.0/. 
  14. "An ES6 Virtual Machine Built in JavaScript". https://benvie.github.com/continuum/. 
  15. "V4 - Qt Wiki". https://wiki.qt.io/V4. 
  16. "ECMAScript Language Specification ECMA-262 5.1 edition". Ecma International. June 2011. http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf. 
  17. "YAJI: Yet Another JavaScript Interpreter". Google Code. http://code.google.com/p/yaji-ecmascript-interpreter/. 
  18. "FESI". September 2003. http://www.lugrin.ch/fesi. 
  19. "Microvium is very small". https://coder-mike.com/blog/2022/06/11/microvium-is-very-small/. 
  20. "Duktape". http://www.duktape.org/. 
  21. https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/xs/XS%20Conformance.md#results
  22. "Apps for IoT". https://www.moddable.com/faq.php#what-is-xs. 
  23. "Xs7 @ Tc-39". https://www.moddable.com/XS7-TC-39. 
  24. "Jsish". http://jsish.org/. 
  25. "MuJS". http://mujs.com/. 
  26. "NGINX JavaScript in Your Web Server Configuration". https://www.youtube.com/watch?v=Jc_L6UffFOs. 
  27. "Let's build a JavaScript Engine" (in en). https://2019.jsconf.eu/jason-williams/lets-build-a-javascript-engine.html. 
  28. "GitHub - boa-dev/boa: Boa is an embeddable and experimental Javascript engine written in Rust." (in en). https://github.com/boa-dev/boa. 
  29. Clark, Mitchell (2022-08-18). "The James Webb Space Telescope runs JavaScript, apparently" (in en). https://www.theverge.com/2022/8/18/23206110/james-webb-space-telescope-javascript-jwst-instrument-control. 
  30. "LibJS JavaScript engine". https://libjs.dev/. 
  31. (in en) Ladybird browser update (June 2023), https://www.youtube.com/watch?v=xdVOdrWuzLQ, retrieved 2023-06-30