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
