Maimuta paianjen - SpiderMonkey
| 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 |
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
| Versiune | Data de lansare | Versiune corespondentă ECMAScript | Versiunea browserului | Funcționalitate adăugată |
|---|---|---|---|---|
| 1.0 | Martie 1996 | Netscape Navigator 2.0 | ||
| 1.1 | August 1996 | Netscape Navigator 3.0 | ||
| 1.2 | Iunie 1997 | Netscape Navigator 4.0 - 4.05 | ||
| 1.3 | Octombrie 1998 | ECMA-262 ediția 1 + 2 | Netscape Navigator 4.06-4.7x | |
| 1.4 | Server Netscape | |||
| 1.5 | Noiembrie 2000 | ECMA-262 ediția a III-a | Netscape Navigator 6, Firefox 1.0 | |
| 1.6 | Noiembrie 2005 | Firefox 1.5 | metode suplimentare de matrice, matrice și șiruri generice, E4X | |
| 1.7 | Octombrie 2006 | Firefox 2.0 | iteratori și generatori, declarație let, înțelegeri matrice, alocare destructurare | |
| 1.8 | Iunie 2008 | Firefox 3.0 | expresii generatoare, închideri de expresii | |
| 1.8.5 | Martie 2011 | ECMA-262 ediția a V-a | Firefox 4.0 | Suport JSON |
| 1.8.8 | Ianuarie 2012 | Firefox 10.0 | ||
| 17 | Noiembrie 2012 | Firefox 17.0 | ||
| 24 | Septembrie 2013 | Firefox 24.0 | ||
| 31 | Iulie 2014 | Firefox 31.0 | ||
| 38 | Mai 2015 | Firefox 38.0 | ||
| 45 | Martie 2016 | Firefox 45.0 | ||
| 52 | Martie 2017 | Firefox 52.0 | ||
| 60 | Mai 2018 | Firefox 60.0 | ||
| 68 | Iulie 2019 | Firefox 68.0 | ||
| 78 | Iunie 2020 | Firefox 78.0 | ||
| 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
-
Site-ul oficial
, motorul SpiderMonkey (JavaScript-C) - Documentație pentru SpiderMonkey
- Pagina Spidermonkey pentru linkuri open source
- Suntem rapid încă? (Reper oficial și comparație)