Le mathématicien français Fabrice Bellard, à l'origine des projets QEMU, FFmpeg, BPG, QuickJS, TinyGL et TinyCC, a publié un nouveau moteur JavaScript pour les systèmes embarqués — Micro QuickJS, capable de compiler et d'exécuter des programmes JavaScript en ne consommant que 10 Ko de RAM. Avec sa bibliothèque en C, le moteur occupe environ 100 Ko de mémoire permanente. Il est possible de compiler JavaScript en bytecode et d'exécuter le bytecode séparément. Le code du projet est écrit en C et est distribué sous licence MIT.
Le moteur prend en charge un sous-ensemble du langage JavaScript, proche de la spécification ECMAScript 5 (ES2019), mais impose des exigences plus strictes au code et interdit l'utilisation de certaines constructions JavaScript inefficaces ou sujettes à erreur. Par exemple, les variables globales doivent être déclarées avec le mot-clé « var », l'utilisation de « with » est interdite, les tableaux ne peuvent pas être vides, et l'initialisation comme « new Number(1) » est impossible ; l'accès aux variables locales via eval n'est pas autorisé.
Les performances de Micro QuickJS sont comparables à celles du moteur QuickJS, développé par Fabrice depuis 2019. Micro QuickJS utilise une partie du code du moteur QuickJS, mais son architecture est largement différente et conçue pour minimiser la consommation de mémoire. Par exemple, Micro QuickJS utilise un ramasse-miettes traçant, tandis que QuickJS repose sur le comptage de références. Le coût du ramasse-miettes n'est que de quelques bits par bloc de mémoire alloué. Un allocateur propriétaire est utilisé pour l'allocation de mémoire, indépendamment de la fonction de bibliothèque malloc().
Autres différences avec QuickJS : pas d'utilisation de la pile ; représentation interne des objets différente ; stockage des chaînes en UTF-8 ; génération de la bibliothèque standard lors de la compilation et son stockage en mémoire permanente, ne créant que quelques objets en RAM ; un analyseur proche de QuickJS, mais ne utilisant pas la récursion ; combinaison en un seul passage de la génération du bytecode et de l'optimisation (QuickJS nécessite plusieurs passages pour l'optimisation). machine virtuellePublié postmarketOS 25.12, une distribution Linux pour smartphones et appareils mobiles.
Source : opennet.ru
