SpiderMonkey est un moteur JavaScript et WebAssembly open-source de la Fondation Mozilla . Le moteur alimente le navigateur Web Firefox et a utilisé plusieurs générations de com...
Il s'agit du premier moteur JavaScript , écrit par Brendan Eich chez Netscape Communications, puis publié en tant que logiciel libre et actuellement maintenu par la Fondation Mozilla. Sa conception permet son intégration dans des applications autres que les navigateurs web, notamment le système de base de données MongoDB, Adobe Acrobat et l'environnement de bureau GNOME.
Histoire
En 1995, Eich « écrivit JavaScript en dix jours » , après avoir été « recruté chez Netscape avec la promesse de “faire du Scheme ” dans le navigateur » . (L’idée d’utiliser Scheme fut abandonnée lorsque « la direction technique [décida] que le langage devait “ressembler à Java .) Fin 1996, Eich, devant « rembourser l’importante dette technique » accumulée durant la première année, « resta chez lui pendant deux semaines pour réécrire Mocha, base du code qui allait devenir SpiderMonkey » . (Mocha était le nom de travail initial du langage.) En 2011, Eich confia la gestion du code de SpiderMonkey à Dave Mandelin
Versions
JägerMonkey
JägerMonkey, nom de code interne MethodJIT, était un compilateur JIT de méthodes complètes conçu pour améliorer les performances dans les cas où TraceMonkey ne pouvait pas générer de code natif stable . Il a été initialement intégré à Firefox 4 et a fini par remplacer complètement TraceMonkey. Il a lui-même été remplacé par IonMonkey.
JägerMonkey fonctionnait de manière très différente des autres compilateurs de sa catégorie : alors que les compilateurs classiques construisaient et optimisaient un graphe de flux de contrôle représentant la fonction, JägerMonkey parcourait linéairement le bytecode SpiderMonkey , la représentation interne de la fonction. Bien que cela empêche les optimisations nécessitant un réordonnancement des instructions, la compilation avec JägerMonkey présente l'avantage d'être très rapide, ce qui est particulièrement utile en JavaScript, où les recompilations dues aux changements de types de variables sont fréquentes.
IonMonkey était un compilateur JIT JavaScript de Mozilla, conçu pour permettre de nombreuses nouvelles optimisations impossibles avec l'architecture précédente de JägerMonkey.
Le compilateur peut générer rapidement du code natif pour les fonctions JavaScript sur les plateformes ARM , x86 et x86-64 . Il est le moteur par défaut depuis Firefox 18.
OdinMonkey
OdinMonkey est le nom du nouveau module d'optimisation de Mozilla pour asm.js , un sous-ensemble de JavaScript facilement compilable. OdinMonkey n'est pas un compilateur JIT ; il utilise le compilateur JIT existant. Il est inclus dans Firefox depuis la version 22. OdinMonkey est désactivé par défaut depuis Firefox 148, sorti en février 2026.
WarpMonkey
Le compilateur JIT WarpMonkey remplace l'ancien moteur IonMonkey à partir de la version 83. Il est capable d'intégrer d'autres scripts et de spécialiser le code en fonction des données et des arguments traités. Il traduit le bytecode et les données du cache en ligne en une représentation intermédiaire de niveau moyen (Ion MIR). Ce graphe est transformé et optimisé avant d'être converti en une représentation intermédiaire de bas niveau (Ion LIR). Cette LIR effectue l'allocation des registres, puis génère du code machine natif lors d'un processus appelé génération de code. Les optimisations supposent ici qu'un script continue de traiter des données similaires à celles déjà rencontrées. Les compilateurs JIT de base sont essentiels au bon fonctionnement, car ils génèrent des représentations intermédiaires (CI) correspondant aux données observées. Si, après la compilation d'un script avec Warp, celui-ci rencontre des données qu'il n'est pas préparé à traiter, il effectue une interruption. Le mécanisme d'interruption reconstruit la trame de pile machine native pour correspondre à la disposition utilisée par l'interpréteur de base, puis lance l'exécution vers cet interpréteur comme si celui-ci avait toujours été utilisé. La construction de cette trame de pile peut utiliser une table latérale spéciale enregistrée par Warp pour reconstruire des valeurs qui ne sont pas disponibles autrement.
Utiliser
SpiderMonkey est conçu pour être intégré à d'autres applications fournissant un environnement hôte pour JavaScript. Voici une liste non exhaustive :
MongoDB est passé de V8 à SpiderMonkey dans la version 3.2
Riak utilise SpiderMonkey comme environnement d'exécution pour les opérations MapReduce JavaScript
CouchDB est un système de base de données (écrit en Erlang ). JavaScript est utilisé pour définir les fonctions de mappage, de filtrage et de réduction, ainsi que pour visualiser les données, par exemple au format HTML.
FreeSWITCH , moteur de téléphonie open source, utilise SpiderMonkey pour permettre aux utilisateurs d'écrire des scripts de gestion d'appels en JavaScript.
ELinks utilise SpiderMonkey pour prendre en charge JavaScript
Certaines parties de SpiderMonkey sont utilisées dans la (ré)implémentation JScript du projet Wine
Synchronet , un serveur BBS, de messagerie électronique, Web et d'applications utilisant le moteur SpiderMonkey
Wasmer a intégré SpiderMonkey à son projet open-source WinterJS, un environnement d'exécution JavaScript.
SpiderMonkey est également utilisé dans de nombreux autres projets open-source ; une liste externe est tenue à jour sur le site des développeurs de Mozilla.
SpiderMonkey inclut un shell JavaScript pour le développement interactif en JavaScript et pour l'exécution en ligne de commande de fichiers de programme JavaScript.