I am astonished at the omission of ChakraCore, open sourced by Microsoft as what Edge used to use, but sadly abandoned by them after they switched Edge to Chromium: https://github.com/chakra-core/ChakraCore. But it looks like it’s still chugging along as a community effort rather than being completely abandoned.
ChakraCore is definitely one of the most notable and significant implementations after the big three.
I would be interested in some spec test suite coverage figures.
I have used a few js engines in the past (nashorn, rhino, otto) and all had problems with missing edge cases in the APIs or really weird quirks in the interop with the host environment.
It is really frustrating that in the end, there aren't really that many actually compliant implementations. Especially implementing the exact regex behaviour.
I can't imagine writing an interpreter for JS that handles all its autoconversion foibles, and now with several more generations of ECMAScript version features piled on (generally for the better), that's a lot more to handle.
And then have to do all the type inferencing to try to get performance, and then the dynamic compiling...
Qt's ES7 js engine has always been solid for me: https://doc.qt.io/qt-5/qjsengine.html ; it used to use V8 but they rewrote it to be better optimized for Qt's needs AFAIK.
Since AssemblyScript counts, I’ll also mention Static TypeScript[1], which I just discovered yesterday. It’s also a subset of TS, which compiles to native machine code.
Not really notable, expect perhaps being the only one on the list with an ES1 mode? :) (Can't promise it's accurate though, as it was hard to find examples).
Otherwise pretty boring (C++, hand-written parser, AST interpreter, ES1/ES3/ES5.1 support minus some regexp/timezone/locale stuff).
Benchmarks for a competent JS that does loop analysis, code emission, and the attendant warmup/dynamic compiling is tough. It's why Java JVMs are endlessly debated on performance vs compiled languages, fairly or not.
I've often wondered why nginx decided to implement their own njs Javascript instead of just embracing lua/luajit which already has a very healthy ecosystem in nginx and, as far as I know, is still orders of magnitude faster than even the fastest Javascript implementations.
According to Igor Sysoev’s 2015 presentation, they disliked Lua’s divergences from the C-style (e.g. begin/end, 1-indexing) as well as the “non-standard” syntax for regex (which would be pretty important for scripting nginx). And while he acknowledged that javascript has its own oddities, as far as he was concerned people are used to those from their use in other contexts.
If you want to watch the entire thing, it’s “A new and powerful way to configure nginx” on youtube.
The article describes a list of engines to embed, so this falls out of scope.
But I still wanted to highlight Opera's Carakan engine which was developed in head-to-head competition with V8 when Opera was still maintaining their own engine.
Moddable's XS JavaScript engine is great for low-resource microcontrollers, with 99%+ conformance to the 2020 JavaScript language standard. It's built by a brilliant team of ex-QuickTime and ex-Apple Media Tool engineers.
ChakraCore is definitely one of the most notable and significant implementations after the big three.