Jump to content

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

(Перенаправлено с SpiderMonkey (движок JavaScript) )

ПаукОбезьяна
Разработчик(и)
Репозиторий github /mozilla-spidermonkey
Написано в С , С++ , Ржавчина
Операционная система Кросс-платформенный
Платформа ИА-32 , x86-64 , ARM , MIPS , SPARC , [1] РИСК-V [2]
Тип JavaScript и WebAssembly Движок
Лицензия МПЛ 2.0 [3]
Веб-сайт обезьяна-паук .dev

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] (Мокка было первоначальным рабочим названием языка.) [6] [7] В 2011 году Эйх передал управление кодом SpiderMonkey Дэйву Манделину. [5]

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

Стандарты

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

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

ОдинОбезьяна

[ редактировать ]

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

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

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

[ редактировать ]

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

  • Mozilla Firefox , Thunderbird , SeaMonkey и другие приложения, использующие платформу приложений Mozilla.
  • Приложения для хранения данных:
    • MongoDB перешла с V8 на SpiderMonkey в версии 3.2. [22]
    • Riak использует SpiderMonkey в качестве среды выполнения для операций JavaScript MapReduce. [23]
    • Система баз данных CouchDB (написана на Erlang ). JavaScript используется для определения карт, фильтров, функций сокращения и просмотра данных, например, в формате HTML.
  • Adobe Acrobat и Adobe Reader, Adobe Flash Professional и Adobe Dreamweaver . Adobe Acrobat DC использует Spidermonkey 24.2 с перенесенной поддержкой ECMA-357. [24]
  • Среда рабочего стола GNOME , версия 3 и новее
  • Yahoo! Виджеты , ранее называвшиеся Konfabulator
  • FreeSWITCH , движок телефонии с открытым исходным кодом, использует SpiderMonkey, чтобы позволить пользователям писать сценарии управления вызовами на JavaScript.
  • PythonMonkey использует SpiderMonkey, чтобы позволить пользователям писать программы, в которых функции, типы и события JavaScript и Python взаимодействуют и (где это возможно) совместно используют память. [25]
  • Текстовый веб-браузер ELinks использует SpiderMonkey для поддержки JavaScript. [26]
  • Части SpiderMonkey используются в Wine. проекта JScript (повторной) реализации [27]
  • Synchronet — сервер BBS, электронной почты, Интернета и приложений, использующий движок SpiderMonkey.
  • JavaScript OSA SpiderMonkey , язык межпроцессного взаимодействия для Mac . компьютера
  • 0 AD — стратегическая игра в реальном времени.
  • Васмер включил SpiderMonkey в свой проект с открытым исходным кодом WinterJS; среда выполнения JavaScript.
  • SpiderMonkey также используется во многих других проектах с открытым исходным кодом; внешний список поддерживается на сайте разработчиков Mozilla. [28]

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

См. также

[ редактировать ]
  1. ^ «1.8.8 – SpiderMonkey | MDN» . Разработчик.mozilla.org. 10 января 2013 года. Архивировано из оригинала 2 мая 2013 года . Проверено 21 марта 2013 г.
  2. ^ «Информационный бюллетень SpiderMonkey (Firefox 110-111)» . Spidermonkey.dev . 16 февраля 2023 г. Проверено 27 декабря 2023 г.
  3. ^ Политика лицензирования Mozilla , mozilla.org, заархивировано из оригинала 2 апреля 2013 г. , получено 26 марта 2013 г.
  4. ^ "Дом" . SpiderMonkey JavaScript/движок WebAssembly . Проверено 24 апреля 2023 г.
  5. ^ Перейти обратно: а б с Эйх, Брендан (21 июня 2011 г.). «Новый владелец модуля JavaScript Engine» . БренданЭйх.com. Архивировано из оригинала 14 июля 2011 года . Проверено 1 июля 2011 г.
  6. ^ Перейти обратно: а б с Эйх, Брендан (3 апреля 2008 г.). «Популярность» . БренданЭйх.com. Архивировано из оригинала 3 июля 2011 года . Проверено 1 июля 2011 г.
  7. ^ Эйх, Брендан (19 августа 2011 г.). «Картирование обезьяньей сферы» . Архивировано из оригинала 13 января 2013 года . Проверено 19 августа 2011 г.
  8. ^ «Новое в JavaScript 1.6» . Архивировано из оригинала 5 сентября 2015 года . Проверено 28 июля 2015 г.
  9. ^ «759422 – Удалить использование e4x при создании учетной записи» . Проверено 5 февраля 2013 г.
  10. ^ «JavaScript:TraceMonkey, MozillaWiki» . Проверено 22 июля 2020 г.
  11. ^ «TraceMonkey: JavaScript Lightspeed, блог Брендана Эйха» . Проверено 22 июля 2020 г.
  12. ^ Пол, Райан (22 августа 2008 г.). «Firefox значительно увеличит производительность JavaScript» . Арс Техника. Архивировано из оригинала 6 мая 2012 года . Проверено 21 марта 2013 г.
  13. ^ Нетеркот, Николас (1 ноября 2011 г.). «SpiderMonkey на диете | Николас Незеркот» . Блог.mozilla.com. Архивировано из оригинала 28 марта 2012 года . Проверено 21 марта 2013 г.
  14. ^ «JaegerMonkey — быстрый JavaScript, всегда!» Mystery Bail Theater» . Байлопан.нет. 26 февраля 2010 года. Архивировано из оригинала 24 марта 2013 года . Проверено 21 марта 2013 г.
  15. ^ Пол, Райан (9 марта 2010 г.). «Mozilla позаимствовала WebKit для создания нового быстрого JS-движка» . Арс Техника. Архивировано из оригинала 16 апреля 2012 года . Проверено 21 марта 2013 г.
  16. ^ «JaegerMonkey — MozillaWiki» . Wiki.mozilla.org. Архивировано из оригинала 23 августа 2013 года . Проверено 21 марта 2013 г.
  17. ^ «Платформа/Функции/IonMonkey — MozillaWiki» . Wiki.mozilla.org. 11 февраля 2013 года. Архивировано из оригинала 8 марта 2013 года . Проверено 21 марта 2013 г.
  18. ^ «IonMonkey: новый JIT-компилятор JavaScript от Mozilla» . Infoq.com. Архивировано из оригинала 8 декабря 2012 года . Проверено 21 марта 2013 г.
  19. ^ «Заметки Firefox — Рабочий стол» . Мозилла.орг. 8 января 2013 г. Архивировано из оригинала 2 сентября 2014 г. Проверено 21 марта 2013 г.
  20. ^ «Warp: Улучшена производительность JS в Firefox 83 — Mozilla Hacks — блог веб-разработчиков» . Mozilla Hacks — блог веб-разработчиков . 13 ноября 2020 г. Проверено 28 августа 2021 г.
  21. ^ «SpiderMonkey — Документация по исходным кодам Firefox» . firefox-source-docs.mozilla.org . Проверено 28 августа 2021 г.
  22. ^ «Изменения JavaScript в MongoDB 3.2 — Руководство MongoDB 3.4» . Архивировано из оригинала 6 июня 2017 года . Проверено 23 ноября 2016 г.
  23. ^ «Выпуск Riak 0.8 и JavaScript Map/Reduce» . Архивировано из оригинала 3 ноября 2011 года . Проверено 24 апреля 2011 г.
  24. ^ «Документация Acrobat DC SDK» . helpx.adobe.com . Проверено 5 ноября 2021 г.
  25. ^ «Distributive-Network/PythonMonkey: движок JavaScript Mozilla SpiderMonkey, встроенный в виртуальную машину Python, использующий движок Python для обеспечения среды хоста JS» . Гитхаб . 7 июля 2023 г. Проверено 10 июля 2023 г.
  26. ^ Болсо, Эрик Инге (8 марта 2005 г.). «Обзор браузеров с текстовым режимом 2005 г.» . Linux-журнал . Архивировано из оригинала 15 марта 2010 года . Проверено 5 августа 2010 г.
  27. ^ список рассылки Wine-cvs. Архивировано 7 февраля 2009 г. на Wayback Machine , 16 сентября 2008 г.: «jscript: добавлен компилятор регулярных выражений на основе реализации регулярных выражений Mozilla».
  28. ^ «SpiderMonkey > ФОСС» . Веб-документы MDN . Проверено 2 апреля 2019 г.
  29. ^ «Введение в оболочку JavaScript» . МДН . Сеть разработчиков Mozilla. 29 сентября 2010 года. Архивировано из оригинала 29 июня 2011 года . Проверено 14 декабря 2010 г. Оболочка JavaScript — это программа командной строки, включенная в дистрибутив исходного кода SpiderMonkey. [...] Вы можете использовать его как интерактивную оболочку [...] Вы также можете передать в командной строке файл программы JavaScript для запуска [...]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 21b7c9afd77299de7187d77260f2f214__1710637920
URL1:https://arc.ask3.ru/arc/aa/21/14/21b7c9afd77299de7187d77260f2f214.html
Заголовок, (Title) документа по адресу, URL1:
SpiderMonkey - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)