stringtranslate.com

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

SpiderMonkey — это движок JavaScript и WebAssembly с открытым исходным кодом , разработанный Mozilla Foundation . [4]

Это первый движок JavaScript , написанный Бренданом Эйхом в Netscape Communications, а затем выпущенный с открытым исходным кодом и в настоящее время поддерживаемый Mozilla Foundation. Он используется в веб-браузере Firefox .

История

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

Версии

Стандарты

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

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

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

TraceMonkey

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

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

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

JägerMonkey

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

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

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

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

IonMonkey

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

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

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

OdinMonkey

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

WarpMonkey

WarpMonkey JIT заменяет прежний движок IonMonkey версии 83. [21] Он способен встраивать другие скрипты и специализировать код на основе обрабатываемых данных и аргументов. Он транслирует байт-код и данные встроенного кэша в представление промежуточного представления среднего уровня (Ion MIR). Этот граф преобразуется и оптимизируется перед понижением до промежуточного представления низкого уровня (Ion LIR). Этот LIR выполняет распределение регистров, а затем генерирует собственный машинный код в процессе, называемом генерацией кода. Оптимизации здесь предполагают, что скрипт продолжает видеть данные, похожие на те, что были видны ранее. Базовые JIT необходимы для успеха здесь, потому что они генерируют IC, которые соответствуют наблюдаемым данным. Если после компиляции скрипта с помощью Warp он сталкивается с данными, которые он не готов обработать, он выполняет аварийное отключение. Механизм аварийного отключения восстанавливает собственный машинный стековый фрейм для соответствия макету, используемому базовым интерпретатором, а затем переходит к этому интерпретатору, как если бы мы запускали его все это время. Построение этого стекового фрейма может использовать специальную побочную таблицу, сохраненную Warp, для реконструкции значений, которые в противном случае недоступны. [22]

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

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

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

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

Ссылки

  1. ^ "1.8.8 – SpiderMonkey | MDN". Developer.mozilla.org. 10 января 2013 г. Архивировано из оригинала 2 мая 2013 г. Получено 21 марта 2013 г.
  2. ^ "SpiderMonkey Newsletter (Firefox 110-111)". spidermonkey.dev . 16 февраля 2023 г. . Получено 27 декабря 2023 г. .
  3. ^ Mozilla Licensing Policies, mozilla.org, архивировано из оригинала 2 апреля 2013 г. , извлечено 26 марта 2013 г.
  4. ^ "Home". SpiderMonkey JavaScript/WebAssembly Engine . Получено 24 апреля 2023 г.
  5. ^ abc Eich, Brendan (21 июня 2011 г.). "Новый владелец модуля JavaScript Engine". BrendanEich.com. Архивировано из оригинала 14 июля 2011 г. Получено 1 июля 2011 г.
  6. ^ abc Eich, Brendan (3 апреля 2008 г.). "Популярность". BrendanEich.com. Архивировано из оригинала 3 июля 2011 г. Получено 1 июля 2011 г.
  7. ^ Эйх, Брендан (19 августа 2011 г.). «Картографирование Monkeysphere». Архивировано из оригинала 13 января 2013 г. Получено 19 августа 2011 г.
  8. ^ "Новое в JavaScript 1.6". Архивировано из оригинала 5 сентября 2015 г. Получено 28 июля 2015 г.
  9. ^ [1]
  10. ^ "759422 – Удалить использование e4x при создании учетной записи" . Получено 5 февраля 2013 г.
  11. ^ "JavaScript:TraceMonkey, MozillaWiki" . Получено 22 июля 2020 г. .
  12. ^ "TraceMonkey: JavaScript Lightspeed, блог Брендана Эйха" . Получено 22 июля 2020 г.
  13. Пол, Райан (22 августа 2008 г.). «Firefox получит значительный прирост производительности JavaScript». Ars Technica. Архивировано из оригинала 6 мая 2012 г. Получено 21 марта 2013 г.
  14. ^ Nethercote, Nicholas (1 ноября 2011 г.). «SpiderMonkey сидит на диете | Nicholas Nethercote». Blog.mozilla.com. Архивировано из оригинала 28 марта 2012 г. Получено 21 марта 2013 г.
  15. ^ «JaegerMonkey – Fast JavaScript, Always! » Mystery Bail Theater». Bailopan.net. 26 февраля 2010 г. Архивировано из оригинала 24 марта 2013 г. Получено 21 марта 2013 г.
  16. ^ Пол, Райан (9 марта 2010 г.). «Mozilla заимствует из WebKit для создания быстрого нового движка JS». Ars Technica. Архивировано из оригинала 16 апреля 2012 г. Получено 21 марта 2013 г.
  17. ^ "JaegerMonkey - MozillaWiki". Wiki.mozilla.org. Архивировано из оригинала 23 августа 2013 года . Получено 21 марта 2013 года .
  18. ^ "Platform/Features/IonMonkey - MozillaWiki". Wiki.mozilla.org. 11 февраля 2013 г. Архивировано из оригинала 8 марта 2013 г. Получено 21 марта 2013 г.
  19. ^ "IonMonkey: новый компилятор JavaScript JIT от Mozilla". Infoq.com. Архивировано из оригинала 8 декабря 2012 г. Получено 21 марта 2013 г.
  20. ^ "Firefox Notes - Desktop". Mozilla.org. 8 января 2013 г. Архивировано из оригинала 2 сентября 2014 г. Получено 21 марта 2013 г.
  21. ^ "Warp: улучшенная производительность JS в Firefox 83 – Mozilla Hacks - блог веб-разработчиков". Mozilla Hacks – блог веб-разработчиков . 13 ноября 2020 г. Получено 28 августа 2021 г.
  22. ^ "SpiderMonkey — Документация Firefox Source Docs". firefox-source-docs.mozilla.org . Получено 28 августа 2021 г. .
  23. ^ "JavaScript Changes in MongoDB 3.2 — MongoDB Manual 3.4". Архивировано из оригинала 6 июня 2017 г. Получено 23 ноября 2016 г.
  24. ^ "Выпуск Riak 0.8 и JavaScript Map/Reduce". Архивировано из оригинала 3 ноября 2011 г. Получено 24 апреля 2011 г.
  25. ^ "Acrobat DC SDK Documentation". helpx.adobe.com . Получено 5 ноября 2021 г. .
  26. ^ "Distributive-Network/PythonMonkey: JavaScript-движок Mozilla SpiderMonkey, встроенный в виртуальную машину Python, использующий движок Python для предоставления среды хоста JS". GitHub . 7 июля 2023 г. . Получено 10 июля 2023 г. .
  27. ^ Bolso, Erik Inge (8 марта 2005 г.). "Обзор браузеров текстового режима 2005 г.". Linux Journal . Архивировано из оригинала 15 марта 2010 г. Получено 5 августа 2010 г.
  28. ^ Список рассылки wine-cvs Архивировано 7 февраля 2009 г. на Wayback Machine , 16 сентября 2008 г.: "jscript: Добавлен компилятор регулярных выражений на основе реализации регулярных выражений Mozilla"
  29. ^ "SpiderMonkey > FOSS". MDN Web Docs . Получено 2 апреля 2019 г.
  30. ^ "Введение в оболочку JavaScript". MDN . Mozilla Developer Network. 29 сентября 2010 г. Архивировано из оригинала 29 июня 2011 г. Получено 14 декабря 2010 г. Оболочка JavaScript — это программа командной строки, включенная в исходный дистрибутив SpiderMonkey. [...] Вы можете использовать ее как интерактивную оболочку [...] Вы также можете передать в командной строке файл программы JavaScript для запуска [...]

Внешние ссылки