ПаукОбезьяна - SpiderMonkey

ПаукОбезьяна
Разработчики)Фонд Mozilla
Mozilla Corporation
Репозиторий Отредактируйте это в Викиданных
Написано вC, C ++
Операционная системаКроссплатформенность
ПлатформаIA-32, x86-64, РУКА, MIPS, SPARC[1]
ТипДвижок JavaScript
ЛицензияMPL 2.0[2]
Интернет сайтобезьяна-паук.dev

ПаукОбезьяна это кодовое имя для первого Движок JavaScript, написано Брендан Эйх в Netscape Связь, позже выпущенная как Открытый исходный код и в настоящее время поддерживается Фонд Mozilla.

История

Эйх «написал JavaScript за десять дней» в 1995 году,[3]будучи "завербованным в Netscape с обещанием" делать Схема 'в браузере ".[4](От идеи использования Scheme отказались, когда «инженерное руководство [решило], что язык должен выглядеть как Java'".)[4] В конце 1996 г. Эйх, нуждающийся в "выплате [] существенных технический долг "ушел с первого года", остался дома на две недели, чтобы переписать Mocha как кодовую базу, которая стала известна как SpiderMonkey ".[3] (Mocha было оригинальным рабочим названием языка.)[4][5]В 2011 году Эйх передал управление кодом SpiderMonkey Дэйву Манделину.[3]

Версии

История версий SpiderMonkey
ВерсияДата выходаСоответствующая версия ECMAScriptВерсия браузераДобавлен функционал
Старая версия, больше не поддерживается: 1.0Март 1996 г.Netscape Navigator 2.0
Старая версия, больше не поддерживается: 1.1Август 1996 г.Netscape Navigator 3.0
Старая версия, больше не поддерживается: 1.2Июнь 1997 г.Netscape Navigator 4.0 - 4.05
Старая версия, больше не поддерживается: 1.3Октябрь 1998ECMA-262 1-е + 2-е изданиеNetscape Navigator 4.06-4.7x
Старая версия, больше не поддерживается: 1.4Сервер Netscape
Старая версия, больше не поддерживается: 1.5Ноябрь 2000 г.ECMA-262 3-е изданиеNetscape Navigator 6, Firefox 1.0
Старая версия, больше не поддерживается: 1.6Ноябрь 2005 г.[6]Firefox 1.5дополнительные методы массива, универсальные типы массивов и строк, E4X
Старая версия, больше не поддерживается: 1.7Октябрь 2006 г.Firefox 2.0итераторы и генераторы, оператор let, понимание массивов, деструктурирующее присваивание
Старая версия, больше не поддерживается: 1.8Июнь 2008 г.Firefox 3.0генератор выражений, замыкания выражений
Старая версия, больше не поддерживается: 1.8.5Март 2011 г.ECMA-262 5-е изданиеFirefox 4.0Поддержка JSON
Старая версия, больше не поддерживается: 1.8.8Январь 2012 г.Firefox 10.0
Старая версия, больше не поддерживается: 17Ноябрь 2012 г.Firefox 17.0
Старая версия, больше не поддерживается: 24Сентябрь 2013Firefox 24.0
Старая версия, больше не поддерживается: 31Июль 2014 г.Firefox 31.0
Старая версия, больше не поддерживается: 38Май 2015 г.Firefox 38.0
Старая версия, больше не поддерживается: 45Март 2016 г.Firefox 45.0
Текущая стабильная версия: 52Март 2017 г.Firefox 52.0

Стандарты

SpiderMonkey реализует спецификацию ECMA-262 (ECMAScript ). ECMA-357 (ECMAScript для XML (E4X)) был исключен в начале 2013 года.[7]

Внутренности

SpiderMonkey написан на C /C ++ и содержит переводчик, IonMonkey JIT-компилятор, а уборщик мусора.

TraceMonkey

TraceMonkey[8] был первым JIT-компилятором, написанным для языка JavaScript. Первоначально представлен как опция в бета-версии и представлен в блоге Брендана Эйха 23 августа 2008 г.[9], компилятор стал частью основной версии как часть SpiderMonkey в Firefox 3.5, обеспечивая "повышение производительности в 20-40 раз быстрее", чем у интерпретатора базовых показателей в Firefox 3.[10]

Вместо того, чтобы компилировать целые функции, TraceMonkey был отслеживание JIT, который работает путем записи поток управления и типы данных во время исполнения интерпретатора. Эти данные затем послужили основой для построения Следы деревьев, узкоспециализированные пути собственный код.

Улучшения JägerMonkey в конечном итоге сделали TraceMonkey устаревшим, особенно с разработкой SpiderMonkey. вывод типа двигатель. TraceMonkey отсутствует в SpiderMonkey начиная с Firefox 11 и далее.[11]

JägerMonkey

JägerMonkey, внутреннее название MethodJIT, был JIT-компилятором всего метода, разработанным для повышения производительности в тех случаях, когда TraceMonkey не мог генерировать стабильную собственный код.[12][13] Впервые он был выпущен в Firefox 4 и в конечном итоге полностью вытеснил TraceMonkey. Сам он был заменен на IonMonkey.

JägerMonkey работал совершенно иначе, чем другие компиляторы этого класса: в то время как типичные компиляторы работали, создавая и оптимизируя граф потока управления представляя функцию, JägerMonkey вместо этого выполнял линейную итерацию вперед через SpiderMonkey байт-код, представление внутренней функции. Хотя это запрещает оптимизацию, требующую переупорядочения инструкций, компиляция JägerMonkey имеет преимущество в том, что она очень быстрая, что полезно для JavaScript, поскольку повторная компиляция из-за изменения типов переменных является частой.

Mozilla реализовала ряд критических оптимизаций в JägerMonkey, в первую очередь полиморфные встроенные кеши и вывод типа.[14]

Разница между методами JIT TraceMonkey и JägerMonkey и необходимость в них обоих объяснялась в статья hacks.mozilla.org. Более подробное объяснение технических деталей было предоставлено Крисом Лири, одним из разработчиков SpiderMonkey, в сообщении в блоге. Более подробную техническую информацию можно найти в других блогах разработчиков: двандер, Дманделин.

IonMonkey

IonMonkey - это название текущего JIT-компилятора JavaScript Mozilla, цель которого - включить множество новых оптимизаций, которые были невозможны с предыдущей архитектурой JägerMonkey.[15]

IonMonkey - более традиционный компилятор: он переводит SpiderMonkey байт-код в граф потока управления, с помощью статическая форма единого назначения (SSA) для промежуточное представление. Эта архитектура позволяет использовать хорошо известные оптимизации из других языков программирования для JavaScript, включая специализацию типов, встраивание функций, линейное сканирование распределение регистров, устранение мертвого кода, и движение кода с инвариантным циклом.[16]

Компилятор может быстро выдавать собственный код переводы функций JavaScript на РУКА, x86, и x86-64 платформы. Это движок по умолчанию, начиная с Firefox 18.[17]

OdinMonkey

OdinMonkey - это название нового модуля оптимизации Mozilla для asm.js, легко компилируемое подмножество JavaScript. OdinMonkey сам по себе не является JIT-компилятором, он использует текущий JIT-компилятор. Он включен в Firefox, начиная с выпуска 22.

Использовать

SpiderMonkey предназначен для встраивания в другие приложения, которые предоставляют среду хоста для JavaScript. Ниже приводится неполный список:

  • Mozilla Fire Fox, Thunderbird, SeaMonkey и другие приложения, использующие Фреймворк приложения Mozilla
  • Приложения для хранения данных:
    • MongoDB переехала из V8 в SpiderMonkey в версии 3.2[18]
    • Риак использует SpiderMonkey в качестве среды выполнения для операций JavaScript MapReduce[19]
    • CouchDB система баз данных (написана на Erlang ). JavaScript используется для определения карт, фильтров, функций сокращения и просмотра данных, например, в формате HTML.
  • Adobe Acrobat и Adobe Reader, Adobe Flash Professional, и Adobe Dreamweaver. Adobe Acrobat DC использует Spidermonkey 24.2 с поддержкой прямого переноса ECMA-357.[20]
  • ГНОМ среда рабочего стола версии 3 и выше
  • Yahoo! Виджеты, ранее названный Конфабулятор
  • FreeSWITCH, движок телефонии с открытым исходным кодом, использует SpiderMonkey, чтобы предоставить пользователям возможность писать сценарии управления вызовами на JavaScript.
  • Текстовые веб-браузеры ELinks и edbrowse используют SpiderMonkey для поддержки JavaScript[21]
  • Части SpiderMonkey используются в Вино проект JScript (повторная) реализация[22]
  • Synchronet, BBS, электронная почта, Интернет и сервер приложений с использованием движка SpiderMonkey
  • JavaScript OSA, обезьяна-паук межпроцессного взаимодействия язык для Macintosh компьютер
  • 0 г., стратегическая игра в реальном времени
  • SpiderMonkey также используется во многих других проектах с открытым исходным кодом; внешний список поддерживается на сайте разработчиков Mozilla.[23]

SpiderMonkey включает оболочку JavaScript для интерактивной разработки JavaScript и для вызова программных файлов JavaScript из командной строки.[24]

Смотрите также

Рекомендации

  1. ^ «1.8.8 - SpiderMonkey | MDN». Developer.mozilla.org. 10 января 2013 г. В архиве из оригинала 2 мая 2013 г.. Получено 21 марта 2013.
  2. ^ Политика лицензирования Mozilla, mozilla.org, в архиве из оригинала 2 апреля 2013 г., получено 26 марта 2013
  3. ^ а б c Эйх, Брендан (21 июня 2011 г.). «Новый владелец модуля движка JavaScript». BrendanEich.com. В архиве из оригинала 14 июля 2011 г.. Получено 1 июля 2011.
  4. ^ а б c Эйх, Брендан (3 апреля 2008 г.). «Популярность». BrendanEich.com. В архиве из оригинала от 3 июля 2011 г.. Получено 1 июля 2011.
  5. ^ Эйх, Брендан (19 августа 2011 г.). «Картографирование обезьяньей сферы». В архиве из оригинала 13 января 2013 г.. Получено 19 августа 2011.
  6. ^ «Новое в JavaScript 1.6». В архиве из оригинала 5 сентября 2015 г.. Получено 28 июля 2015.
  7. ^ «759422 - Убрать использование e4x при создании учетной записи». Получено 5 февраля 2013.
  8. ^ "JavaScript: TraceMonkey, MozillaWiki". Получено 22 июля 2020.
  9. ^ «TraceMonkey: JavaScript Lightspeed, блог Брендана Эйха». Получено 22 июля 2020.
  10. ^ Пол, Райан (22 августа 2008 г.). «Firefox получит значительный прирост производительности JavaScript». Ars Technica. В архиве из оригинала 6 мая 2012 г.. Получено 21 марта 2013.
  11. ^ Nethercote, Николас (1 ноября 2011 г.). «Обезьяна-паук сидит на диете | Николас Нетеркот». Blog.mozilla.com. В архиве из оригинала 28 марта 2012 г.. Получено 21 марта 2013.
  12. ^ «JaegerMonkey - быстрый JavaScript, всегда!» Mystery Bail Theater ». Bailopan.net. 26 февраля 2010 г. В архиве из оригинала 24 марта 2013 г.. Получено 21 марта 2013.
  13. ^ Пол, Райан (9 марта 2010 г.). «Mozilla заимствует у WebKit для создания нового быстрого движка JS». Ars Technica. В архиве из оригинала 16 апреля 2012 г.. Получено 21 марта 2013.
  14. ^ "JaegerMonkey - MozillaWiki". Wiki.mozilla.org. В архиве из оригинала 23 августа 2013 г.. Получено 21 марта 2013.
  15. ^ «Платформа / Возможности / IonMonkey - MozillaWiki». Wiki.mozilla.org. 11 февраля 2013 г. В архиве из оригинала 8 марта 2013 г.. Получено 21 марта 2013.
  16. ^ «IonMonkey: новый JIT-компилятор JavaScript от Mozilla». Infoq.com. В архиве из оригинала 8 декабря 2012 г.. Получено 21 марта 2013.
  17. ^ «Заметки о Firefox - Рабочий стол». Mozilla.org. 8 января 2013 г. В архиве из оригинала 2 сентября 2014 г.. Получено 21 марта 2013.
  18. ^ «Изменения JavaScript в MongoDB 3.2 - Руководство по MongoDB 3.4». В архиве из оригинала от 6 июня 2017 г.. Получено 23 ноября 2016.
  19. ^ «Релиз Riak 0.8 и JavaScript Map / Reduce». В архиве из оригинала 3 ноября 2011 г.. Получено 24 апреля 2011.
  20. ^ «Документация по Acrobat DC SDK». help.adobe.com. Получено 27 февраля 2020. Ядро движка JavaScript перенесено в версию 24.2 SpiderMonkey (базовый движок JavaScript от Mozilla).
  21. ^ Больсо, Эрик Инге (8 марта 2005 г.). "Обзор браузера в текстовом режиме 2005 г.". Linux журнал. В архиве из оригинала 15 марта 2010 г.. Получено 5 августа 2010.
  22. ^ список рассылки wine-cvs В архиве 7 февраля 2009 г. Wayback Machine, 16 сентября 2008 г .: «jscript: добавлен компилятор регулярных выражений на основе реализации Mozilla regexp»
  23. ^ "SpiderMonkey> FOSS". Веб-документы MDN. Получено 2 апреля 2019.
  24. ^ «Введение в оболочку JavaScript». MDN. Сеть разработчиков Mozilla. 29 сентября 2010. Архивировано с оригинал 29 июня 2011 г.. Получено 14 декабря 2010. Оболочка JavaScript - это программа командной строки, включенная в исходный код SpiderMonkey. [...] Вы можете использовать его как интерактивную оболочку [...] Вы также можете передать в командной строке файл программы JavaScript для запуска [...]

внешняя ссылка