Maimuta paianjen - SpiderMonkey

Maimuta paianjen
Spidermonkey-logo-2021.svg
Dezvoltatori Fundația
Mozilla Mozilla Corporation
Repertoriu
Scris in C , C ++ , rugină
Sistem de operare Cross-platform
Platformă IA-32 , x86-64 , ARM , MIPS , SPARC
Tip Motor JavaScript
Licență MPL 2.0
Site-ul web spidermonkey .dev

SpiderMonkey este primul motor JavaScript , scris de Brendan Eich la Netscape Communications, lansat ulterior ca open source și întreținut în prezent de Fundația Mozilla . Este încă utilizat în browserul web Firefox .

Istorie

Eich „a scris JavaScript în zece zile” în 1995, după ce a fost „recrutat în Netscape cu promisiunea de a„ face Scheme ”în browser”. (Ideea utilizării schemei a fost abandonată când „managementul ingineresc [a decis] că limbajul trebuie să„ semene cu Java ”.) La sfârșitul anului 1996, Eich, trebuind să „plătească [ datoria tehnică substanțială ” rămasă din primul an , „a rămas acasă două săptămâni pentru a rescrie Mocha ca bază de cod care a devenit cunoscută sub numele de SpiderMonkey”. (Mocha era numele de lucru original al limbii.) În 2011, Eich a transferat gestionarea codului SpiderMonkey către Dave Mandelin.

Versiuni

Istoricul versiunilor SpiderMonkey
Versiune Data de lansare Versiune corespondentă ECMAScript Versiunea browserului Funcționalitate adăugată
Versiune veche, care nu mai este menținută: 1.0 Martie 1996 Netscape Navigator 2.0
Versiune veche, care nu mai este menținută: 1.1 August 1996 Netscape Navigator 3.0
Versiune veche, care nu mai este menținută: 1.2 Iunie 1997 Netscape Navigator 4.0 - 4.05
Versiune veche, care nu mai este menținută: 1.3 Octombrie 1998 ECMA-262 ediția 1 + 2 Netscape Navigator 4.06-4.7x
Versiune veche, care nu mai este menținută: 1.4 Server Netscape
Versiune veche, care nu mai este menținută: 1.5 Noiembrie 2000 ECMA-262 ediția a III-a Netscape Navigator 6, Firefox 1.0
Versiune veche, care nu mai este menținută: 1.6 Noiembrie 2005 Firefox 1.5 metode suplimentare de matrice, matrice și șiruri generice, E4X
Versiune veche, care nu mai este menținută: 1.7 Octombrie 2006 Firefox 2.0 iteratori și generatori, declarație let, înțelegeri matrice, alocare destructurare
Versiune veche, care nu mai este menținută: 1.8 Iunie 2008 Firefox 3.0 expresii generatoare, închideri de expresii
Versiune veche, care nu mai este menținută: 1.8.5 Martie 2011 ECMA-262 ediția a V-a Firefox 4.0 Suport JSON
Versiune veche, care nu mai este menținută: 1.8.8 Ianuarie 2012 Firefox 10.0
Versiune veche, care nu mai este menținută: 17 Noiembrie 2012 Firefox 17.0
Versiune veche, care nu mai este menținută: 24 Septembrie 2013 Firefox 24.0
Versiune veche, care nu mai este menținută: 31 Iulie 2014 Firefox 31.0
Versiune veche, care nu mai este menținută: 38 Mai 2015 Firefox 38.0
Versiune veche, care nu mai este menținută: 45 Martie 2016 Firefox 45.0
Versiune veche, care nu mai este menținută: 52 Martie 2017 Firefox 52.0
Versiune veche, care nu mai este menținută: 60 Mai 2018 Firefox 60.0
Versiune veche, care nu mai este menținută: 68 Iulie 2019 Firefox 68.0
Versiune stabilă curentă: 78 Iunie 2020 Firefox 78.0
Lansare viitoare: 90 2021 Firefox 90.0

Standarde

SpiderMonkey implementează specificația ECMA-262 ( ECMAScript ). ECMA-357 ( ECMAScript pentru XML (E4X)) a fost abandonat la începutul anului 2013.

Internele

SpiderMonkey este scris în C / C ++ și conține un interpret , compilatorul IonMonkey JIT și un colector de gunoi .

TraceMonkey

TraceMonkey a fost primul compilator JIT scris pentru limbajul JavaScript. Introdus inițial ca opțiune într-o versiune beta și introdus în blogul lui Brendan Eich pe 23 august 2008, compilatorul a devenit parte a versiunii principale ca parte a SpiderMonkey în Firefox 3.5 , oferind „îmbunătățiri de performanță cuprinse între 20 și 40 de ori mai rapid” decât interpretul de bază în Firefox 3 .

În loc să compileze funcții întregi, TraceMonkey a fost un JIT de urmărire , care operează prin înregistrarea fluxului de control și a tipurilor de date în timpul executării interpretului. Aceste date au informat apoi construcția copacilor de urmărire , căi foarte specializate ale codului nativ .

Îmbunătățirile aduse JägerMonkey au făcut în cele din urmă TraceMonkey învechit, în special odată cu dezvoltarea motorului de inferență de tip SpiderMonkey . TraceMonkey este absent de la SpiderMonkey de la Firefox 11 în continuare.

JägerMonkey

JägerMonkey, denumit intern MethodJIT, a fost un compilator JIT de o metodă întreagă conceput pentru a îmbunătăți performanța în cazurile în care TraceMonkey nu a putut genera un cod nativ stabil . A fost lansat pentru prima dată în Firefox 4 și în cele din urmă a înlocuit în totalitate TraceMonkey. El însuși a fost înlocuit de IonMonkey.

JägerMonkey a funcționat foarte diferit față de alte compilatoare din clasa sa: în timp ce compilatoarele tipice au funcționat prin construirea și optimizarea unui grafic de flux de control reprezentând funcția, JägerMonkey operat în loc prin iterarea liniară înainte prin codul bytode SpiderMonkey , reprezentarea funcției interne. Deși acest lucru interzice optimizările care necesită reordonarea instrucțiunilor, compilarea JägerMonkey are avantajul de a fi foarte rapidă, ceea ce este util pentru JavaScript, deoarece recompilarea din cauza schimbării tipurilor de variabile este frecventă.

Mozilla a implementat o serie de optimizări critice în JägerMonkey, cel mai important cache-uri polimorfe în linie și inferență de tip .

Diferența dintre tehnicile TraceMonkey și JägerMonkey JIT și necesitatea ambelor a fost explicată într- un articol hacks.mozilla.org . O explicație mai detaliată a detaliilor tehnice a fost oferită de Chris Leary, unul dintre dezvoltatorii SpiderMonkey, într-o postare pe blog . Mai multe informații tehnice pot fi găsite în blogurile altor dezvoltatori: dvander , dmandelin .

IonMonkey

IonMonkey a fost un compilator JavaScript JIT al Mozilla, care avea ca scop să permită multe noi optimizări care erau imposibile cu arhitectura anterioară JägerMonkey.

IonMonkey a fost un compilator mai tradițional: a tradus codul byt SpiderMonkey într-un grafic de flux de control , utilizând formularul static unic de atribuire (SSA) pentru reprezentarea intermediară . Această arhitectură a permis utilizarea optimizărilor bine-cunoscute din alte limbaje de programare pentru JavaScript, inclusiv specializarea tipului, integrarea funcțiilor , alocarea registrului de scanare liniară , eliminarea codului mort și mișcarea codului invariant în buclă .

Compilatorul poate emite traduceri rapide de coduri native ale funcțiilor JavaScript pe platformele ARM , x86 și x86-64 . A fost motorul implicit de la Firefox 18.

OdinMonkey

OdinMonkey este numele noului modul de optimizare Mozilla pentru asm.js , un subset de JavaScript ușor de compilat. OdinMonkey în sine nu este un compilator JIT, folosește compilatorul JIT curent. Este inclus cu Firefox de la versiunea 22.

WarpMonkey

WarpMonkey JIT înlocuiește fostul motor IonMonkey din versiunea 83. Este capabil să integreze alte scripturi și să specializeze codul pe baza datelor și argumentelor procesate. Acesta traduce codul de octet și datele Inline Cache într-o reprezentare de nivel intermediar de reprezentare intermediară (Ion MIR). Acest grafic este transformat și optimizat înainte de a fi redus la o reprezentare intermediară de nivel scăzut (Ion LIR). Acest LIR efectuează alocarea registrului și apoi generează codul mașinii native într-un proces numit Generare cod. Optimizările de aici presupun că un script continuă să vadă date similare celor văzute anterior. JIT-urile de bază sunt esențiale pentru succes aici, deoarece generează circuite integrate care se potrivesc cu datele observate. Dacă după ce un script este compilat cu Warp, acesta întâlnește date despre care nu este pregătit să se ocupe de el, efectuează o salvare. Mecanismul de salvare reconstituie cadrul stivei de mașini native pentru a se potrivi cu aspectul folosit de interpretul de bază și apoi se ramifică cu interpretul respectiv ca și cum am fi rulat-o tot timpul. Construirea acestui cadru de stivă poate utiliza o masă specială salvată de Warp pentru a reconstrui valori care altfel nu sunt disponibile.

Utilizare

SpiderMonkey este destinat să fie încorporat în alte aplicații care oferă medii gazdă pentru JavaScript. Urmează o listă incompletă:

  • Mozilla Firefox , Thunderbird , SeaMonkey și alte aplicații care utilizează cadrul de aplicații Mozilla
  • Aplicații de stocare a datelor:
    • MongoDB sa mutat de la V8 la SpiderMonkey în versiunea 3.2
    • Riak folosește SpiderMonkey ca timp de rulare pentru operațiunile JavaScript MapReduce
    • Sistemul de baze de date CouchDB (scris în Erlang ). JavaScript este utilizat pentru definirea hărților, filtrelor, reducerea funcțiilor și vizualizarea datelor, de exemplu în format HTML.
  • Adobe Acrobat și Adobe Reader, Adobe Flash Professional și Adobe Dreamweaver . Adobe Acrobat DC folosește Spidermonkey 24.2 cu suport ECMA-357 portat înainte.
  • Mediul desktop GNOME , versiunea 3 și ulterioară
  • Yahoo! Widgets , denumit anterior Konfabulator
  • FreeSWITCH , motor de telefonie open-source, folosește SpiderMonkey pentru a permite utilizatorilor să scrie scripturi de gestionare a apelurilor în JavaScript
  • Browserul web bazat pe text ELinks folosește SpiderMonkey pentru a susține JavaScript
  • Părți din SpiderMonkey sunt utilizate în implementarea JScript (re) a proiectului Wine
  • Synchronet , un BBS, e-mail, Web și server de aplicații utilizând motorul SpiderMonkey
  • JavaScript OSA , un limbaj de comunicare inter-proces SpiderMonkey pentru computerul Macintosh
  • 0 AD , un joc de strategie în timp real
  • SpiderMonkey este, de asemenea, utilizat în multe alte proiecte open-source; o listă externă este menținută pe site-ul dezvoltatorului Mozilla.
  • Sparx Systems Enterprise Architect , un instrument comercial de modelare UML, SysML, BPMN, ArchiMate: scripturile pot fi create în cadrul proiectului pentru a apela propriul API al instrumentului

SpiderMonkey include un JavaScript Shell pentru dezvoltarea JavaScript interactivă și pentru invocarea în linie de comandă a fișierelor de programe JavaScript.

Vezi si

Referințe

linkuri externe