Der französische Mathematiker Fabrice Bellard, der einst die Projekte QEMU und FFmpeg ins Leben rief, die schnellste Formel zur Berechnung der Zahl Pi entwickelte und ein Bildformat schuf , hat die erste Version der neuen JavaScript-Engine veröffentlicht . Die Engine zeichnet sich durch ihre Kompaktheit aus und ist für die Einbettung in andere Systeme konzipiert. Der Projektcode ist in C geschrieben und steht unter der MIT-Lizenz zur Verfügung. Auch eine Version der Engine, die in WebAssembly mit Emscripten kompilierte wurde und für die Ausführung in Browsern geeignet ist, ist verfügbar.
Die Implementierung von JavaScript entspricht der ES2019-Spezifikation, einschließlich Module, asynchrone Generatoren und Proxys. Optional werden nicht standardisierte mathematische Funktionen für JavaScript unterstützt, wie die Typen BigInt und BigFloat sowie . In Bezug auf die Leistung übertrifft QuickJS erheblich vergleichbare Engines, beispielsweise im Benchmark-Test
bench-v8 übertrifft die Engine DukTape JerryScript MuJS um das Siebenfache.
Neben der Bibliothek zur Einbettung des Engines in Anwendungen bietet das Projekt auch einen Interpreter qjs an, der verwendet werden kann, um JavaScript-Code aus der Kommandozeile auszuführen. Darüber hinaus steht der Compiler qjsc zur Verfügung, der in der Lage ist, eigenständige ausführbare Dateien zu generieren, die keine externen Abhängigkeiten benötigen.
Hauptmerkmale:
- Kompaktheit und einfache Einbettung in andere Projekte. Der Code umfasst nur einige Dateien in C, die für die Kompilierung keine externen Abhängigkeiten erfordern. Eine kompilierte einfachste Anwendung nimmt etwa 190 KB in Anspruch;
- Sehr hohe Leistung und kurze Startzeit. Das Durchlaufen von 56.000 Tests zur Kompatibilität mit ECMAScript dauert etwa 100 Sekunden, wenn es auf einem Kern eines gewöhnlichen Desktop-PCs ausgeführt wird. Die Initialisierung der Runtime benötigt weniger als 300 Mikrosekunden;
- Fast vollständige Unterstützung der ES2019-Spezifikation und vollständige Unterstützung der Anwendung 'B', die Komponenten zur Kompatibilität mit älteren Webanwendungen definiert;
- Vollständige Durchführung aller Tests aus dem ECMAScript Test Suite;
- Unterstützung der Kompilierung von JavaScript-Code zu ausführbaren Dateien ohne externe Abhängigkeiten;
- Ein auf Linkzählung basierender Garbage Collector, der zyklische Reinigungen vermeidet, was vorhersehbares Verhalten und einen reduzierten Speicherverbrauch ermöglicht.
- Ein Satz von Erweiterungen für mathematische Berechnungen in JavaScript.
- Eine Shell zur Ausführung von Code im Befehlszeilenmodus, die Syntax-Hervorhebung unterstützt.
- Eine kompakte Standardbibliothek mit Bindungen an die C-Bibliothek.
Das Projekt entwickelt auch drei unterstützende C-Bibliotheken, die in QuickJS verwendet werden und für den separaten Einsatz geeignet sind:
- libregexp – eine schnelle Implementierung von regulären Ausdrücken, die vollständig mit der JavaScript ES 2019-Spezifikation kompatibel ist.
- libunicode – eine kompakte Bibliothek zur Arbeit mit Unicode.
- libbf – eine Implementierung von Operationen mit Fließkommazahlen beliebiger Genauigkeit und transzendenten Funktionen mit präziser Rundung.
Quelle: opennet.ru
