ПаукОбезьяна
этой статьи Начальный раздел может быть слишком коротким, чтобы адекватно суммировать ключевые моменты . ( март 2023 г. ) |
![]() | |
Разработчик(и) | |
---|---|
Репозиторий | github |
Написано в | С , С++ , Ржавчина |
Операционная система | Кросс-платформенный |
Платформа | ИА-32 , x86-64 , ARM , MIPS , SPARC , [1] РИСК-V [2] |
Тип | JavaScript и WebAssembly Движок |
Лицензия | МПЛ 2.0 [3] |
Веб-сайт | обезьяна-паук |
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]
Версии
[ редактировать ]Версия | Дата выпуска | Соответствующая версия 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
[ редактировать ]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
[ редактировать ]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
[ редактировать ]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.
WarpMonkey
[ редактировать ]JIT WarpMonkey заменяет прежний движок IonMonkey версии 83. [20] Он способен встраивать другие сценарии и специализировать код на основе обрабатываемых данных и аргументов.Он преобразует байт-код и данные встроенного кэша в представление промежуточного представления среднего уровня (Ion MIR). Этот график преобразуется и оптимизируется перед тем, как его понижают до промежуточного представления низкого уровня (Ion LIR). Этот LIR выполняет распределение регистров, а затем генерирует собственный машинный код в процессе, называемом генерацией кода.Оптимизации здесь предполагают, что сценарий продолжает видеть данные, аналогичные тем, которые наблюдались раньше. Базовые JIT здесь необходимы для успеха, поскольку они генерируют IC, соответствующие наблюдаемым данным. Если после компиляции сценария с помощью Warp он обнаруживает данные, которые он не готов обработать, он выполняет аварийное восстановление. Механизм аварийного восстановления реконструирует собственный кадр стека машины, чтобы он соответствовал макету, используемому базовым интерпретатором, а затем переходит к этому интерпретатору, как если бы мы выполняли его все время. При построении этого кадра стека может использоваться специальная боковая таблица, сохраненная Warp, для восстановления значений, которые иначе недоступны. [21]
Использовать
[ редактировать ]SpiderMonkey предназначен для встраивания в другие приложения, предоставляющие хост-среды для JavaScript. Ниже приводится неполный список:
- Mozilla Firefox , Thunderbird , SeaMonkey и другие приложения, использующие платформу приложений Mozilla.
- Форки Firefox, включая веб-браузеры Pale Moon , Basilisk и Waterfox .
- Приложения для хранения данных:
- 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.8.8 – SpiderMonkey | MDN» . Разработчик.mozilla.org. 10 января 2013 года. Архивировано из оригинала 2 мая 2013 года . Проверено 21 марта 2013 г.
- ^ «Информационный бюллетень SpiderMonkey (Firefox 110-111)» . Spidermonkey.dev . 16 февраля 2023 г. Проверено 27 декабря 2023 г.
- ^ Политика лицензирования Mozilla , mozilla.org, заархивировано из оригинала 2 апреля 2013 г. , получено 26 марта 2013 г.
- ^ "Дом" . SpiderMonkey JavaScript/движок WebAssembly . Проверено 24 апреля 2023 г.
- ^ Перейти обратно: а б с Эйх, Брендан (21 июня 2011 г.). «Новый владелец модуля JavaScript Engine» . БренданЭйх.com. Архивировано из оригинала 14 июля 2011 года . Проверено 1 июля 2011 г.
- ^ Перейти обратно: а б с Эйх, Брендан (3 апреля 2008 г.). «Популярность» . БренданЭйх.com. Архивировано из оригинала 3 июля 2011 года . Проверено 1 июля 2011 г.
- ^ Эйх, Брендан (19 августа 2011 г.). «Картирование обезьяньей сферы» . Архивировано из оригинала 13 января 2013 года . Проверено 19 августа 2011 г.
- ^ «Новое в JavaScript 1.6» . Архивировано из оригинала 5 сентября 2015 года . Проверено 28 июля 2015 г.
- ^ «759422 – Удалить использование e4x при создании учетной записи» . Проверено 5 февраля 2013 г.
- ^ «JavaScript:TraceMonkey, MozillaWiki» . Проверено 22 июля 2020 г.
- ^ «TraceMonkey: JavaScript Lightspeed, блог Брендана Эйха» . Проверено 22 июля 2020 г.
- ^ Пол, Райан (22 августа 2008 г.). «Firefox значительно увеличит производительность JavaScript» . Арс Техника. Архивировано из оригинала 6 мая 2012 года . Проверено 21 марта 2013 г.
- ^ Нетеркот, Николас (1 ноября 2011 г.). «SpiderMonkey на диете | Николас Незеркот» . Блог.mozilla.com. Архивировано из оригинала 28 марта 2012 года . Проверено 21 марта 2013 г.
- ^ «JaegerMonkey — быстрый JavaScript, всегда!» Mystery Bail Theater» . Байлопан.нет. 26 февраля 2010 года. Архивировано из оригинала 24 марта 2013 года . Проверено 21 марта 2013 г.
- ^ Пол, Райан (9 марта 2010 г.). «Mozilla позаимствовала WebKit для создания нового быстрого JS-движка» . Арс Техника. Архивировано из оригинала 16 апреля 2012 года . Проверено 21 марта 2013 г.
- ^ «JaegerMonkey — MozillaWiki» . Wiki.mozilla.org. Архивировано из оригинала 23 августа 2013 года . Проверено 21 марта 2013 г.
- ^ «Платформа/Функции/IonMonkey — MozillaWiki» . Wiki.mozilla.org. 11 февраля 2013 года. Архивировано из оригинала 8 марта 2013 года . Проверено 21 марта 2013 г.
- ^ «IonMonkey: новый JIT-компилятор JavaScript от Mozilla» . Infoq.com. Архивировано из оригинала 8 декабря 2012 года . Проверено 21 марта 2013 г.
- ^ «Заметки Firefox — Рабочий стол» . Мозилла.орг. 8 января 2013 г. Архивировано из оригинала 2 сентября 2014 г. Проверено 21 марта 2013 г.
- ^ «Warp: Улучшена производительность JS в Firefox 83 — Mozilla Hacks — блог веб-разработчиков» . Mozilla Hacks — блог веб-разработчиков . 13 ноября 2020 г. Проверено 28 августа 2021 г.
- ^ «SpiderMonkey — Документация по исходным кодам Firefox» . firefox-source-docs.mozilla.org . Проверено 28 августа 2021 г.
- ^ «Изменения JavaScript в MongoDB 3.2 — Руководство MongoDB 3.4» . Архивировано из оригинала 6 июня 2017 года . Проверено 23 ноября 2016 г.
- ^ «Выпуск Riak 0.8 и JavaScript Map/Reduce» . Архивировано из оригинала 3 ноября 2011 года . Проверено 24 апреля 2011 г.
- ^ «Документация Acrobat DC SDK» . helpx.adobe.com . Проверено 5 ноября 2021 г.
- ^ «Distributive-Network/PythonMonkey: движок JavaScript Mozilla SpiderMonkey, встроенный в виртуальную машину Python, использующий движок Python для обеспечения среды хоста JS» . Гитхаб . 7 июля 2023 г. Проверено 10 июля 2023 г.
- ^ Болсо, Эрик Инге (8 марта 2005 г.). «Обзор браузеров с текстовым режимом 2005 г.» . Linux-журнал . Архивировано из оригинала 15 марта 2010 года . Проверено 5 августа 2010 г.
- ^ список рассылки Wine-cvs. Архивировано 7 февраля 2009 г. на Wayback Machine , 16 сентября 2008 г.: «jscript: добавлен компилятор регулярных выражений на основе реализации регулярных выражений Mozilla».
- ^ «SpiderMonkey > ФОСС» . Веб-документы MDN . Проверено 2 апреля 2019 г.
- ^ «Введение в оболочку JavaScript» . МДН . Сеть разработчиков Mozilla. 29 сентября 2010 года. Архивировано из оригинала 29 июня 2011 года . Проверено 14 декабря 2010 г.
Оболочка JavaScript — это программа командной строки, включенная в дистрибутив исходного кода SpiderMonkey. [...] Вы можете использовать его как интерактивную оболочку [...] Вы также можете передать в командной строке файл программы JavaScript для запуска [...]
Внешние ссылки
[ редактировать ]- Официальный сайт
, движок SpiderMonkey (JavaScript-C)
- Календарь выпусков Firefox (и Spidermonkey)