SpiderMonkey

  • hg.mozilla.org/mozilla-central/
Уреди на ВикиподацимаНаписан уC/C++Оперативни системCross-platformПлатформаIA-32, x86-64, ARM, MIPS, SPARC[1]ЛиценцаMPL 2.0[2]Веб-сајтdeveloper.mozilla.org/en/SpiderMonkey

SpiderMonkey је кодни назив за први икада JavaScript engine, који је написао Брендан Аик у Netscape Communications, касније објављен као open source а сада[када?] га одржава Mozilla Foundation. СпајдерМанки обезбеђује JavaScript подршку за Mozilla Firefox и различите уградње као што је GNOME 3 десктоп.

Историја

Аик "је написао JavaScript за десет дана" 1995-е,[3] био је "регрутован у Netscape уз обећање да ће 'радити Scheme' у претраживачу".[4] (Идеја коришћења Scheme је напуштена кад је "инжињерски менаџмент [одлучио] да језик мора ‘изгледати као Java’".[4]) У јесен 1996,Аик, је морао да "отплати знатне техничке дугове" заостале још из прве године, "остао је кући две недеље да преправи Mocha-у као кодну базу која је постала позната као SpiderMonkey".[3] Име SpiderMonkey је можда изабрано позивање на филм Beavis and Butt-head Do America, у ком јунак Tom Anderson помиње да су се слова у наслову "дркала као пар паук-мајмуна."[5] 2011., Аик је препустио управљање SpiderMonkey кодом Дејву Менделину.[3]

TraceMonkey

TraceMonkey је први JIT компајлер написан за JavaScript језик. Компајлер је први кут изашао као део SpiderMonkey-а у Firefox 3.5, омогућивши "побољшања перформанси између 20 и 40 пута" у односу на основни интерпретер у Firefox 3.[6]

Уместо компајлирања целих функција, TraceMonkey је tracing JIT, који ради бележећи контроу тока и тиp података током извршавања интерпретера. Ови подаци затим информишу конструкцију Trace Стабала, високоспецијализованих путева првобитног кода.

Побољшања у JägerMonkey-у су евентуално учинила TraceMonkey застарелим, поготово развијањем SpiderMonkey type inference енџина. TraceMonkey је одсутан из SpiderMonkey-а од Firefox 11 па надаље.[7]

JägerMonkey

JägerMonkey,или унутрашње назван MethodJIT, је био JIT компајлер дизајниран да унапреди перформансе у случајевима где TraceMonkey није успевао да генерише стабилан изворни код.[8][9] Први пут се појавио са Firefox 4 и у потпуности заменио TraceMonkey. Самом њега је касније заменио IonMonkey.

JägerMonkey је радио веома другачије од осталих компајлера из своје класе: док су типични компајлери радили тако што су конструисали и оптимизовали граф контроле тока представљајући функцију, JägerMonkey је функционисао тако што је линеарно пролазио кроз SpiderMonkey bytecode,репрезентацију унутрашње функције. Иако ово забрањује оптимизацију која захтева поновно сортирање инструкција, JägerMonkey компајлирање је у предности јер је веома брзо, што је корисно за JavaScript пошто је рекомпајлирање често због промена типова променљивих.

Mozilla је имплементирала велики број критичних оптимизација у JägerMonkey, најважнији су полиморфни редни кешs и закључивање типова.[10]

Разлике између TraceMonkey и JägerMonkey JIT техника и потреба за обема су објашњене у a hacks.mozilla.org article. Детаљно објашњење техничких детаља је навео Chris Leary, један од креатора SpiderMonkey-а, in a blog post. Више техничких информација се може наћи на блоговима других дивелопера: dvander, dmandelin.

Стандарди

SpiderMonkey имплементира ECMA-262 верзију 5.1 (ECMAScript) и још неколико додатих могућности. ECMA-357 (ECMAScript for XML (E4X)) је појавио на почетку 2013 .[11]

Иако се SpiderMonkey користи у Firefox-у, он не омогућава хост окружење као Document Object Model (DOM). У Mozilla пројектима који подржавају DOM, Gecko омогућава хост окружење.

Интернали

SpiderMonkey је написан у C/C++ и садржи интерпретер, IonMonkey JIT компајлер, и сакупљаче смећа.

IonMonkey

IonMonkey је назив Мозилиног тренутног JavaScript JIT компајлера, који има за циљ да омогући много нових оптимизација које су биле немогуће у JägerMonkey архитектури.[12]

IonMonkey је традиционалнији: преводи SpiderMonkey bytecode уграф контроле тока, користећи static single assignment form (SSA) за напредну репрезентацију. Ова архитектура омогућава да добро познате оптимизације из других програмских језика буду коришћене у JavaScript-у, укључујући специјализацију типа, инлајнинг функције, линеарно скенирање алокацију регистара, елиминацију мртвог кода, и кретање кода инваријанте петље.[13]

Компајлер може да брзо емитује транслацију изворног кода JavaScript функција не ARM, x86, и x86-64 платформама. Он је стандардан енџин од Firefox 18.[14]

OdinMonkey

OdinMonkey је име Мозилиног новог модула оптимизаије за asm.js, лако-компајлирајући подсет JavaScript-а. OdinMonkey сам по себи није JIT компајлер, он користи тренутни JIT компајлер. Саставни је део Firefox-а од верзије 22.

Употреба

SpiderMonkey треба да буде уграђен у другим апликацијама које пружају хост окружења за JavaScript. Следи непотпуна листа:

  • Mozilla Firefox, Thunderbird, SeaMonkey, и остале апликације које користе Mozilla application framework
  • Adobe Acrobat и Adobe Reader, Adobe Flash Professional, и Adobe Dreamweaver
  • GNOME десктоп окружење, верзија 3 па надаље
  • Yahoo! Widgets, првобитно назван Konfabulator
  • UOX3, Ultima Online сервер емулатор
  • Пакет апликација првенствено намењен да помогне у дизајнирању role-playing game-ова.
  • Methabot веб кролер користи SpiderMonkey у повезаним окружењеима за покретање корисничких типова фајлова и URL парсера
  • Такође се користи у CouchDB систему база података написаном у Erlang - JavaScript се користи за дефинисање мапа, филтере, редуковање финкција и преглед података на припер у HTML формату
  • FreeSWITCH, open-source telephony engine, користи SpiderMonkey да обогући корисницима да пишу скрипте за call management у JavaScript-у
  • SPOT SIP Engine
  • ELinks, претраживач веба базиран на тексту, користи SpiderMonkey да омогући JavaScript[15]
  • Делови SpiderMonkey-а се користе у Wine пројектима Jscript (ре-)имплементација[16]
  • SpiderMonkey се такође користи у многим open-source пројектима, погледај https://developer.mozilla.org/en/SpiderMonkey/FOSS Архивирано на сајту Wayback Machine (24. фебруар 2012)
  • Riak користи SpiderMonkey као runtime за JavaScript MapReduce операције[17]
  • Synchronet, BBS, e-mail, Web, и апликативни сервер користи SpiderMonkey енџин
  • JavaScript OSA, SpiderMonkey inter-process communication језик заMacintosh рачунар
  • 0 A.D., стратегијска игрица
  • SAP HANA Application Services, за креирање пословне логике на HANA engine/app серверу

SpiderMonkey садржи JavaScript Shell интерактивни JavaScript за развој и за позивање командне линије JavaScript програмских фајлова.[18]

Неколико великих организација користи SpiderMonkey да управља њиховим JavaScript-ом за front-end апликације.

Погледај и

  • Rhino (JavaScript engine)
  • List of ECMAScript engines

Референце

  1. ^ „1.8.8 - SpiderMonkey | MDN”. Developer.mozilla.org. 10. 01. 2013. Архивирано из оригинала 14. 11. 2013. г. Приступљено 21. 03. 2013. 
  2. ^ Mozilla Licensing Policies, mozilla.org, Приступљено 26. 03. 2013 
  3. ^ а б в Eich, Brendan (21. 06. 2011). „New JavaScript Engine Module Owner”. BrendanEich.com. 
  4. ^ а б Eich, Brendan (3. 04. 2008). „Popularity”. BrendanEich.com. 
  5. ^ Eich, Brendan (19. 08. 2011). „Mapping the Monkeysphere”. Архивирано из оригинала 13. 01. 2013. г. Приступљено 01. 06. 2015. 
  6. ^ Paul, Ryan (22. 08. 2008). „Firefox to get massive JavaScript performance boost”. Ars Technica. Приступљено 21. 03. 2013. 
  7. ^ Nethercote, Nicholas (1. 11. 2011). „SpiderMonkey is on a diet | Nicholas Nethercote”. Blog.mozilla.com. Приступљено 21. 03. 2013. 
  8. ^ „JaegerMonkey – Fast JavaScript, Always! » Mystery Bail Theater”. Bailopan.net. 26. 02. 2010. Приступљено 21. 03. 2013. 
  9. ^ Paul, Ryan (9. 03. 2010). „Mozilla borrows from WebKit to build fast new JS engine”. Ars Technica. Приступљено 21. 03. 2013. 
  10. ^ „JaegerMonkey - MozillaWiki”. Wiki.mozilla.org. Приступљено 21. 03. 2013. 
  11. ^ „759422 – Remove use of e4x in account creation”. Архивирано из оригинала 23. 04. 2014. г. Приступљено 5. 02. 2013. 
  12. ^ „Platform/Features/IonMonkey - MozillaWiki”. Wiki.mozilla.org. 11. 02. 2013. Приступљено 21. 03. 2013. 
  13. ^ „IonMonkey: Mozilla’s new JavaScript JIT compiler”. Infoq.com. Приступљено 21. 03. 2013. 
  14. ^ „Firefox Notes - Desktop”. Mozilla.org. 8. 01. 2013. Приступљено 21. 03. 2013. 
  15. ^ Bolso, Erik Inge (8. 03. 2005). „2005 Text Mode Browser Roundup”. Linux Journal. Приступљено 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”. Приступљено 24. 04. 2011. 
  18. ^ „Introduction to the JavaScript shell”. MDN. Mozilla Developer Network. 29. 9. 2010. Архивирано из оригинала 29. 06. 2011. г. Приступљено 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 [...] 

Спољашње везе

  • Званични веб-сајт, SpiderMonkey (JavaScript-C) engine
  • Documentation for SpiderMonkey Архивирано на сајту Wayback Machine (14. мај 2008)
  • Spidermonkey's page for Open Source Links Архивирано на сајту Wayback Machine (24. фебруар 2012)
  • Are We Fast Yet? (Official benchmark and comparison)