Из Википедии, бесплатной энциклопедии
  (Перенаправлено из TraceMonkey )
Перейти к навигации Перейти к поиску

SpiderMonkey - это кодовое название первого движка JavaScript , написанного Бренданом Эйхом из Netscape Communications, позже выпущенного как открытый исходный код и в настоящее время поддерживаемого Mozilla Foundation .

История [ править ]

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

Версии [ править ]

Стандарты [ править ]

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

Внутреннее [ править ]

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

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, в сообщении в блоге . Более подробную техническую информацию можно найти в блогах других разработчиков: dvander , dmandelin .

IonMonkey [ править ]

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

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

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

OdinMonkey [ править ]

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

Используйте [ редактировать ]

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

  • Mozilla Firefox , Thunderbird , SeaMonkey и другие приложения, использующие платформу приложений Mozilla.
    • Форки Firefox, включая веб-браузеры Pale Moon , Basilisk и Waterfox .
  • Приложения для хранения данных:
    • MongoDB перенесена с V8 на SpiderMonkey в версии 3.2 [18]
    • Riak использует 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]
  • Среда рабочего стола GNOME версии 3 и новее
  • Yahoo! Виджеты , ранее называвшиеся Konfabulator
  • FreeSWITCH , движок телефонии с открытым исходным кодом, использует SpiderMonkey, чтобы позволить пользователям писать сценарии управления вызовами на JavaScript.
  • Текстовые веб-браузеры ELinks и edbrowse используют SpiderMonkey для поддержки JavaScript [21]
  • Части SpiderMonkey используются в (повторной) реализации JScript проекта Wine [22]
  • Synchronet , BBS, электронная почта, Интернет и сервер приложений с использованием движка SpiderMonkey.
  • JavaScript OSA , язык межпроцессного взаимодействия SpiderMonkey для компьютера Macintosh
  • 0 AD , стратегическая игра в реальном времени
  • SpiderMonkey также используется во многих других проектах с открытым исходным кодом; внешний список ведется на сайте разработчика Mozilla. [23]

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

См. Также [ править ]

  • Rhino (движок JavaScript)
  • Список движков ECMAScript

Ссылки [ править ]

  1. ^ "1.8.8 - SpiderMonkey | MDN" . Developer.mozilla.org. 10 января 2013 года. Архивировано 2 мая 2013 года . Проверено 21 марта 2013 года .
  2. ^ Политики лицензирования Mozilla , mozilla.org, заархивировано из оригинала 2 апреля 2013 г. , получено 26 марта 2013 г.
  3. ^ a b c Эйх, Брендан (21 июня 2011 г.). «Новый владелец модуля движка JavaScript» . BrendanEich.com. Архивировано 14 июля 2011 года . Проверено 1 июля 2011 года .
  4. ^ a b c Эйх, Брендан (3 апреля 2008 г.). «Популярность» . BrendanEich.com. Архивировано 3 июля 2011 года . Проверено 1 июля 2011 года .
  5. Перейти ↑ Eich, Brendan (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. ^ Нетеркот Николай (1 ноября 2011). «Обезьяна-паук сидит на диете | Николас Нетеркот» . Blog.mozilla.com. Архивировано 28 марта 2012 года . Проверено 21 марта 2013 года .
  12. ^ «JaegerMonkey - быстрый JavaScript, всегда!» Таинственный театр залога » . 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 Notes - Рабочий стол" . 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. ^ Bolso, Эрик Инга (8 марта 2005). "Обзор браузера текстового режима 2005 г." . Linux Journal . Архивировано 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 для запуска [...]

Внешние ссылки [ править ]

  • Официальный сайт , движок SpiderMonkey (JavaScript-C)
  • Документация для SpiderMonkey
  • Страница Spidermonkey для ссылок с открытым исходным кодом
  • Мы еще постимся? (Официальный тест и сравнение)