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 ga održava Mozilla Foundation. SpajderManki obezbeđuje JavaScript podršku za Mozilla Firefox i različite ugradnje kao što je GNOME 3 desktop.

## Historija
Aik "je napisao JavaScript za deset dana" 1995-e, bio je "regrutovan u Netscape uz obećanje da će 'raditi Scheme' u pretraživaču". (Ideja korišćenja Scheme je napuštena kad je "inžinjerski menadžment [odlučio] da jezik mora ‘izgledati kao Java’".) 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". 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." 2011., Aik je prepustio upravljanje SpiderMonkey kodom Dejvu Mendelinu.

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

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, visoko specijalizovanih 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.

### JägerMonkey
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. 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.

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

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
SpiderMonkey je napisan u C/C++ i sadrži interpreter, IonMonkey JIT kompajler, i sakupljače smeća.

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

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.

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.

### OdinMonkey
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
SpiderMonkey treba da bude ugrađen u drugim aplikacijama koje pružaju host okruženja za JavaScript. Sledi nepotpuna lista:
* Mozilla Firefox, Thunderbird, SeaMonkey, i ostale aplikacije koje koriste Mozilla application framework
* Adobe Acrobat i Adobe Reader, Adobe Flash Professional, i Adobe Dreamweaver
* GNOME desktop okruženje, verzija 3 pa nadalje
* Yahoo! Widgets, prvobitno nazvan *Konfabulator*
* UOX3, *[[Ultima Online]]* server emulator
* Paket aplikacija prvenstveno namenjen da pomogne u dizajniranju role-playing game-ova.
*Methabot veb kroler koristi SpiderMonkey u povezanim okruženjeima za pokretanje korisničkih tipova fajlova i URL parsera
* Takođe se koristi u CouchDB sistemu baza podataka napisanom u Erlang - JavaScript se koristi za definisanje mapa, filtere, redukovanje finkcija i pregled podataka na priper u HTML formatu
* FreeSWITCH, open-source telephony engine, koristi SpiderMonkey da obogući korisnicima da pišu skripte za call management u JavaScript-u
* SPOT SIP Engine
* ELinks, pretraživač veba baziran na tekstu, koristi SpiderMonkey da omogući JavaScript
* Delovi SpiderMonkey-a se koriste u Wine projektima Jscript (re-)implementacija
* SpiderMonkey se takođe koristi u mnogim open-source projektima, pogledaj https://developer.mozilla.org/en/SpiderMonkey/FOSS 
* Riak koristi SpiderMonkey kao runtime za JavaScript MapReduce operacije
* Synchronet, BBS, e-mail, Web, i aplikativni server koristi SpiderMonkey endžin
* JavaScript OSA, SpiderMonkey inter-process communication jezik zaMacintosh računar
* 0 A.D., strategijska igrica
* SAP HANA Application Services, za kreiranje poslovne logike na HANA engine/app serveru

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

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

## Reference

## Vanjske veze
* , SpiderMonkey (JavaScript-C) engine
* Documentation for SpiderMonkey 
* Spidermonkey's page for Open Source Links 
* Are We Fast Yet? (Official benchmark and comparison)