Article de reference

Singe-araignée

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...

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 compilateurs JavaScript juste-à-temps (JIT) , notamment TraceMonkey, JägerMonkey, IonMonkey et l'actuel WarpMonkey.

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.

Mozilla a implémenté un certain nombre d'optimisations critiques dans JägerMonkey, notamment des caches en ligne polymorphes et l'inférence de type .

La différence entre les techniques JIT de TraceMonkey et JägerMonkey, ainsi que la nécessité de les utiliser toutes deux, ont été expliquées dans un article de hacks.mozilla.org . Chris Leary, l'un des développeurs de SpiderMonkey, a fourni une explication plus détaillée des aspects techniques dans un article de blog ( archivé le 9 décembre 2012 sur archive.today ). Vous trouverez davantage d'informations techniques sur les blogs d'autres développeurs : dvander et dmandelin .

IonMonkey

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.

IonMonkey était un compilateur plus traditionnel : il traduisait le bytecode de SpiderMonkey en un graphe de flux de contrôle , en utilisant la forme d’affectation unique statique (SSA) pour la représentation intermédiaire . Cette architecture permettait d’utiliser pour JavaScript des optimisations bien connues d’autres langages de programmation, notamment la spécialisation de type, l’inclusion de fonctions , l’allocation de registres par balayage linéaire , l’élimination du code mort et le déplacement de code invariant par boucle .

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 :

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.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index