Le mathématicien français Fabrice Bellard, qui a fondé les projets QEMU et FFmpeg, ainsi que créé la formule la plus rapide pour calculer le nombre Pi et développé le format d'image , a publié le premier numéro d'un nouveau moteur JavaScript . Ce moteur se distingue par sa compacité et est conçu pour être intégré dans d'autres systèmes. Le code du projet est écrit en C et distribué sous licence MIT. Une version du moteur, compilée en WebAssembly avec Emscripten, est également disponible pour être exécutée dans les navigateurs.
L'implémentation de JavaScript suit la spécification ES2019, y compris les modules, les générateurs asynchrones et les proxies. Le support optionnel des types mathématiques non standards pour JavaScript, tels que BigInt et BigFloat, ainsi que . En termes de performances, QuickJS surpasse de manière significative bench-v8, il devance le moteur
XS DukTape JerryScript MuJS En plus de la bibliothèque pour intégrer le moteur dans des applications, le projet propose également un interpréteur qjs, qui peut être utilisé pour exécuter du code JavaScript à partir de la ligne de commande. De plus, un compilateur qjsc est disponible, capable de générer en sortie des fichiers exécutables autonomes ne nécessitant pas de dépendances externes.
Compacité et facilité d'intégration dans d'autres projets. Le code comprend seulement quelques fichiers en C, ne nécessitant pas de dépendances externes pour la compilation. Une application simple compilée occupe environ 190 Ko;
Caractéristiques principales :
- Performance très élevée et temps de démarrage réduit. Passer 56 000 tests de compatibilité avec ECMAScript prend environ 100 secondes lorsqu'il est exécuté sur un seul cœur d'un PC de bureau ordinaire. L'initialisation du runtime prend moins de 300 microsecondes;
- Support presque complet de la spécification ES2019 et support total de l'application « B », définissant les composants pour la compatibilité avec les anciennes applications web;
- Passage complet de tous les tests du jeu de tests ECMAScript;
- Support de la compilation du code JavaScript en fichiers exécutables sans dépendances externes;
- Ramasse-miettes basé sur le comptage des références sans nettoyage cyclique, permettant d'obtenir un comportement prévisible et de réduire la consommation de mémoire;
- Ramasse-miettes basé sur le comptage des liens sans exécution cyclique de nettoyage, permettant d'obtenir un comportement prévisible et une réduction de la consommation de mémoire.
- Ensemble d'extensions pour le calcul mathématique en JavaScript;
- Interface pour l'exécution de code en mode ligne de commande, prenant en charge la coloration syntaxique;
- Bibliothèque standard compacte avec des liaisons aux bibliothèques C.
Le projet développe également trois bibliothèques C complémentaires, utilisées dans QuickJS et adaptées à un usage distinct :
- libregexp — une implémentation rapide des expressions régulières, entièrement compatible avec la spécification JavaScript ES 2019;
- libunicode — bibliothèque compacte pour le traitement de l'Unicode;
- libbf — implémentation d'opérations à virgule flottante de précision arbitraire et de fonctions transcendantales avec un arrondi exact.
Source : opennet.ru
