SpiderMonkey

S Vikipedije, slobodne enciklopedije
SpiderMonkey
Programer(i)Mozilla Foundation / Mozilla Corporation
Repozitorijum Uredi na Vikipodacima
Napisan uC/C++
Operativni sistemCross-platform
PlatformaIA-32, x86-64, ARM, MIPS, SPARC [1]
LicencaMPL 2.0[2]
Veb-sajtdeveloper.mozilla.org/en/SpiderMonkey

SpiderMonkey je kodni naziv za prvi ikada JavaScript engine, koji je napisao Brendan Aik u Netscape Communications, kasnije objavljen kao open source a sada[kada?] ga održava Mozilla Foundation. SpajderManki obezbeđuje JavaScript podršku za Mozilla Firefox i različite ugradnje kao što je GNOME 3 desktop.

Istorija[uredi | uredi izvor]

Aik "je napisao JavaScript za deset dana" 1995-e,[3] bio je "regrutovan u Netscape uz obećanje da će 'raditi Scheme' u pretraživaču".[4] (Ideja korišćenja Scheme je napuštena kad je "inžinjerski menadžment [odlučio] da jezik mora ‘izgledati kao Java’".[4]) U jesen 1996,Aik, je morao da "otplati znatne tehničke dugove" zaostale još iz prve godine, "ostao je kući dve nedelje da prepravi Mocha-u kao kodnu bazu koja je postala poznata kao SpiderMonkey".[3] Ime SpiderMonkey je možda izabrano pozivanje na film Beavis and Butt-head Do America, u kom junak Tom Anderson pominje da su se slova u naslovu "drkala kao par pauk-majmuna."[5] 2011., Aik je prepustio upravljanje SpiderMonkey kodom Dejvu Mendelinu.[3]

TraceMonkey[uredi | uredi izvor]

TraceMonkey je prvi JIT kompajler napisan za JavaScript jezik. Kompajler je prvi kut izašao kao deo SpiderMonkey-a u Firefox 3.5, omogućivši "poboljšanja performansi između 20 i 40 puta" u odnosu na osnovni interpreter u Firefox 3.[6]

Umesto kompajliranja celih funkcija, TraceMonkey je tracing JIT, koji radi beležeći kontrou toka i tip podataka tokom izvršavanja interpretera. Ovi podaci zatim informišu konstrukciju Trace Stabala, visokospecijalizovanih puteva prvobitnog koda.

Poboljšanja u JägerMonkey-u su eventualno učinila TraceMonkey zastarelim, pogotovo razvijanjem SpiderMonkey type inference endžina. TraceMonkey je odsutan iz SpiderMonkey-a od Firefox 11 pa nadalje.[7]

JägerMonkey[uredi | uredi izvor]

JägerMonkey,ili unutrašnje nazvan MethodJIT, je bio JIT kompajler dizajniran da unapredi performanse u slučajevima gde TraceMonkey nije uspevao da generiše stabilan izvorni kod.[8][9] Prvi put se pojavio sa Firefox 4 i u potpunosti zamenio TraceMonkey. Samom njega je kasnije zamenio IonMonkey.

JägerMonkey je radio veoma drugačije od ostalih kompajlera iz svoje klase: dok su tipični kompajleri radili tako što su konstruisali i optimizovali graf kontrole toka predstavljajući funkciju, JägerMonkey je funkcionisao tako što je linearno prolazio kroz SpiderMonkey bytecode,reprezentaciju unutrašnje funkcije. Iako ovo zabranjuje optimizaciju koja zahteva ponovno sortiranje instrukcija, JägerMonkey kompajliranje je u prednosti jer je veoma brzo, što je korisno za JavaScript pošto je rekompajliranje često zbog promena tipova promenljivih.

Mozilla je implementirala veliki broj kritičnih optimizacija u JägerMonkey, najvažniji su polimorfni redni kešs i zaključivanje tipova.[10]

Razlike između TraceMonkey i JägerMonkey JIT tehnika i potreba za obema su objašnjene u a hacks.mozilla.org article. Detaljno objašnjenje tehničkih detalja je naveo Chris Leary, jedan od kreatora SpiderMonkey-a, in a blog post. Više tehničkih informacija se može naći na blogovima drugih divelopera: dvander, dmandelin.

Standardi[uredi | uredi izvor]

SpiderMonkey implementira ECMA-262 verziju 5.1 (ECMAScript) i još nekoliko dodatih mogućnosti. ECMA-357 (ECMAScript for XML (E4X)) je pojavio na početku 2013 .[11]

Iako se SpiderMonkey koristi u Firefox-u, on ne omogućava host okruženje kao Document Object Model (DOM). U Mozilla projektima koji podržavaju DOM, Gecko omogućava host okruženje.

Internali[uredi | uredi izvor]

SpiderMonkey je napisan u C/C++ i sadrži interpreter, IonMonkey JIT kompajler, i sakupljače smeća.

IonMonkey[uredi | uredi izvor]

IonMonkey je naziv Mozilinog trenutnog JavaScript JIT kompajlera, koji ima za cilj da omogući mnogo novih optimizacija koje su bile nemoguće u JägerMonkey arhitekturi.[12]

IonMonkey je tradicionalniji: prevodi SpiderMonkey bytecode ugraf kontrole toka, koristeći static single assignment form (SSA) za naprednu reprezentaciju. Ova arhitektura omogućava da dobro poznate optimizacije iz drugih programskih jezika budu korišćene u JavaScript-u, uključujući specijalizaciju tipa, inlajning funkcije, linearno skeniranje alokaciju registara, eliminaciju mrtvog koda, i kretanje koda invarijante petlje.[13]

Kompajler može da brzo emituje translaciju izvornog koda JavaScript funkcija ne ARM, x86, i x86-64 platformama. On je standardan endžin od Firefox 18.[14]

OdinMonkey[uredi | uredi izvor]

OdinMonkey je ime Mozilinog novog modula optimizaije za asm.js, lako-kompajlirajući podset JavaScript-a. OdinMonkey sam po sebi nije JIT kompajler, on koristi trenutni JIT kompajler. Sastavni je deo Firefox-a od verzije 22.

Upotreba[uredi | uredi izvor]

SpiderMonkey treba da bude ugrađen u drugim aplikacijama koje pružaju host okruženja za JavaScript. Sledi nepotpuna lista:

SpiderMonkey sadrži JavaScript Shell interaktivni JavaScript za razvoj i za pozivanje komandne linije JavaScript programskih fajlova.[18]

Nekoliko velikih organizacija koristi SpiderMonkey da upravlja njihovim JavaScript-om za front-end aplikacije.

Pogledaj i[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ „1.8.8 - SpiderMonkey | MDN”. Developer.mozilla.org. 10. 01. 2013. Arhivirano iz originala 14. 11. 2013. g. Pristupljeno 21. 03. 2013. 
  2. ^ Mozilla Licensing Policies, mozilla.org, Pristupljeno 26. 03. 2013 
  3. ^ a b v Eich, Brendan (21. 06. 2011). „New JavaScript Engine Module Owner”. BrendanEich.com. 
  4. ^ a b Eich, Brendan (3. 04. 2008). „Popularity”. BrendanEich.com. 
  5. ^ Eich, Brendan (19. 08. 2011). „Mapping the Monkeysphere”. Arhivirano iz originala 13. 01. 2013. g. Pristupljeno 01. 06. 2015. 
  6. ^ Paul, Ryan (22. 08. 2008). „Firefox to get massive JavaScript performance boost”. Ars Technica. Pristupljeno 21. 03. 2013. 
  7. ^ Nethercote, Nicholas (1. 11. 2011). „SpiderMonkey is on a diet | Nicholas Nethercote”. Blog.mozilla.com. Pristupljeno 21. 03. 2013. 
  8. ^ „JaegerMonkey – Fast JavaScript, Always! » Mystery Bail Theater”. Bailopan.net. 26. 02. 2010. Pristupljeno 21. 03. 2013. 
  9. ^ Paul, Ryan (9. 03. 2010). „Mozilla borrows from WebKit to build fast new JS engine”. Ars Technica. Pristupljeno 21. 03. 2013. 
  10. ^ „JaegerMonkey - MozillaWiki”. Wiki.mozilla.org. Pristupljeno 21. 03. 2013. 
  11. ^ „759422 – Remove use of e4x in account creation”. Arhivirano iz originala 23. 04. 2014. g. Pristupljeno 5. 02. 2013. 
  12. ^ „Platform/Features/IonMonkey - MozillaWiki”. Wiki.mozilla.org. 11. 02. 2013. Pristupljeno 21. 03. 2013. 
  13. ^ „IonMonkey: Mozilla’s new JavaScript JIT compiler”. Infoq.com. Pristupljeno 21. 03. 2013. 
  14. ^ „Firefox Notes - Desktop”. Mozilla.org. 8. 01. 2013. Pristupljeno 21. 03. 2013. 
  15. ^ Bolso, Erik Inge (8. 03. 2005). „2005 Text Mode Browser Roundup”. Linux Journal. Pristupljeno 5. 08. 2010. 
  16. ^ wine-cvs mailing list, 16 September 2008: "jscript: Added regular expression compiler based on Mozilla regexp implementation"
  17. ^ „The Release Riak 0.8 and JavaScript Map/Reduce”. Pristupljeno 24. 04. 2011. 
  18. ^ „Introduction to the JavaScript shell”. MDN. Mozilla Developer Network. 29. 9. 2010. Arhivirano iz originala 29. 06. 2011. g. Pristupljeno 14. 12. 2010. „The JavaScript shell is a command-line program included in the SpiderMonkey source distribution. [...] You can use it as an interactive shell [...] You can also pass in, on the command line, a JavaScript program file to run [...] 

Spoljašnje veze[uredi | uredi izvor]