QuickJS : un moteur JavaScript léger, prenant en charge la spécification ES2019
Y compris les modules et les générateurs asynchrones

Le , par Bill Fassinou

48PARTAGES

12  0 
Fabrice Bellard, un programmeur informatique français, a présenté cette semaine QuickJS, un moteur JavaScript léger et intégrable, qui prend en charge la spécification ES2019, y compris les modules, les générateurs asynchrones et les mandataires. Il prend éventuellement en charge des extensions mathématiques telles que les grands entiers (BigInt), les grands nombres à virgule flottante (BigFloat) et la surcharge d'opérateurs. Fabrice Bellard a publié le moteur le mardi passé sous la licence MIT.

Fabrice Bellard est un mathématicien, ingénieur et développeur français. Il est surtout connu comme étant le développeur principal de QEMU (un émulateur qui permet d'émuler diverses architectures matérielles) et Tiny C Compiler (tcc), un compilateur C très petit, mais complet, qui a été écrit à l'origine pour gagner le concours humoristique « International Obfuscated C Code Contest » (concours du code le plus obscur en langage C).


Fabrice Bellard

Il est aussi connu pour avoir mis en place le serveur Vidéotex Buster (dédié au téléchargement de logiciels freewares via Minitel) par son utilitaire sous DOS nommé LZEXE qui comprimait un exécutable en le précédant du code qui le décompressait au chargement. Il a présenté QuickJS cette semaine, un moteur JavaScript petit et intégrable, prenant en charge la spécification ES2019, y compris les modules, les générateurs asynchrones et les mandataires. Voyons ci-dessous les caractéristiques essentielles qu’il cite à QuickJS :

  • petit et facilement intégrable : QuickJS comporte juste quelques fichiers C et ne possède aucune dépendance externe. C’est environ 190 Ko de code x86 pour un programme « hello world » ;
  • QuickJS un s'interprète rapidement avec un temps de démarrage très court : QuickJS exécute les 56 000 tests de la suite de tests ECMAScript en environ 100 secondes sur un seul cœur d’un PC de bureau. Le cycle de vie complet d'une instance d'exécution se termine en moins de 300 microsecondes ;
  • QuickJS prend en charge presque complètement les spécifications d’EcmaScript 2019. Ceci comprend les modules, les générateurs asynchrones et une prise en charge complète de l’Annexe B (compatibilité Web héritée) ;
  • QuickJS peut compiler des sources JavaScript en exécutables sans recourir à une dépendance externe ;
  • QuickJS collecte des miettes en utilisant le comptage de références (pour réduire l'utilisation de la mémoire et un comportement déterministe) avec la suppression des cycles ;
  • QuickJS prend en charge des extensions mathématiques : BigInt, BigFloat, surcharge d’opérateur, mode bigint, mode mathématique ;
  • c’est un interpréteur de ligne de commande avec une colorisation contextuelle implémentée en JavaScript ;
  • il propose une petite bibliothèque standard intégrée avec les wrappers de la bibliothèque C.

QuickJS intègre les bibliothèques C suivantes pouvant être utilisées dans d'autres projets :

  • libregexp : une petite bibliothèque rapide d'expressions rationnelles entièrement conforme à la spécification JavaScript ES2019 ;
  • libunicode : une petite bibliothèque Unicode prenant en charge la conversion de casse, la normalisation Unicode, les requêtes de script Unicode, les requêtes de catégorie générale Unicode et toutes les propriétés binaires Unicode ;
  • libbf : il s'agit aussi d'une petite bibliothèque implémentant des opérations à virgule flottante IEEE 754 et des fonctions transcendantales avec arrondi exact. Il est maintenu en tant que projet séparé.

À l’installation, un Makefile est fourni pour compiler le moteur sous Linux ou Mac OS/X. Un support Windows préliminaire est disponible via une compilation croisée sur un hôte Linux avec les outils MingGW. Modifiez le haut de la liste Makefile si vous souhaitez sélectionner des options spécifiques, puis exécutez les make. Vous pouvez taper « make install » en tant que root si vous souhaitez installer les fichiers binaires et les fichiers de support sur /usr/local (ceci n'est pas nécessaire pour utiliser QuickJS).

Vous pouvez consulter la documentation de QuickJS sur son site Web pour en savoir plus. Il fournit également des informations sur le benchmark montrant les performances de QuickJS avec le moteur V8 de Google et une comparaison entre ce dernier et d'autres outils de la même catégorie, notamment DuckTape version 2.3.0, XS version 8.8.0, MuJS version 1.0.6 et JerryScript version 2b8c4286 de git. Tous les moteurs JS testés sont des interprètes et fonctionnent avec des ressources limitées. Pour finir, notez que tous les programmes ont été compilés avec le compilateur GCC 4.9.2 sur un Fedora 21. Ils ont été exécutés sur un processeur Core i5 4570 à 3,2 GHz.

Source : QuickJS

Et vous ?

Qu'en pensez-vous ?

Voir aussi

France : un développeur du logiciel VLC et un hacker nommés chevaliers de l'Ordre du Mérite pour leur contribution dans le domaine du logiciel libre

BPG : un nouveau format d'image de qualité supérieure, basé sur la compression HEVC. Il se positionne comme un remplaçant de JPEG

Le moteur de JavaScript V8 de Chrome bénéficie d'un lot d'améliorations, afin de le rendre plus rapide et moins lourd

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de SimonDecoline
Membre expert https://www.developpez.com
Le 12/07/2019 à 23:02
Merci pour cette news intéressante. Par contre, c'est vraiment la pire biographie de Fabrice Bellard que j'ai jamais lue. L'article n'en parle pas mais c'est aussi l'auteur original de ffmpeg, la lib à la base de vlc, utilisée quotidiennement par des millions de gens. Sans parler qu'il a aussi écrit un des programmes les plus performants pour calculer PI, etc.
https://en.wikipedia.org/wiki/Fabrice_Bellard
2  0 
Avatar de melka one
Membre éprouvé https://www.developpez.com
Le 12/07/2019 à 22:41
Je comprends pas l'intérêt
etre un passionné c'est tout. de plus vu son CVcode on ne peut resté indifférent et cherché avant tout a tester le moteur et voir ce qu'il apporte.
0  0 
Avatar de epsilon68
Membre éprouvé https://www.developpez.com
Le 13/07/2019 à 8:45
je suis curieux sur le comptage de reference avec cycles. Je croyais que ce n'etait pas possible en javascript...
0  0 
Avatar de psychadelic
Expert confirmé https://www.developpez.com
Le 12/07/2019 à 20:07
bel exploit, bientôt un navigateur "made in France?, ou alors comme moteur alternatif pour nodeJS ?

sinon les générateur "asynchrone" ce sont les fonctions "générateur" (avec un yield)?
mais les 2 autres : les modules et les mandataires... c'est quoi ?

quand à la surcharge d'opérateur, c'est super mais ça m'étonne , c'est vraiment dans la norme ES2019 ?? si quelqu'un à une doc dessus je serai curieux de la lire
0  1 
Avatar de Markand
Membre confirmé https://www.developpez.com
Le 12/07/2019 à 17:25
Je comprends pas l'intérêt de développer une quinzaine de moteurs Javascript, il y en a dejà plein pourquoi ne pas y contribuer ? mujs, duktape pour ne citez qu'eux (en terme de légereté).

Et faire une version d'une bibliothèque sous forme de date c'est vraiment tout sauf une bonne idée.
0  2 

 
Contacter le responsable de la rubrique JavaScript

Partenaire : Hébergement Web