Разработчики) | Mozilla Foundation Mozilla Corporation |
---|---|
Репозиторий | |
Написано в | C , C ++ , Rust |
Операционная система | Кроссплатформенность |
Платформа | IA-32 , x86-64 , ARM , MIPS , SPARC [1] |
Тип | Движок JavaScript |
Лицензия | MPL 2.0 [2] |
Интернет сайт | обезьяна- |
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]
Версии [ править ]
Версия | Дата выхода | Соответствующая версия 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 | Октябрь 1998 | ECMA-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 | Сентябрь 2013 | Firefox 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 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.8.8 - SpiderMonkey | MDN" . Developer.mozilla.org. 10 января 2013 года. Архивировано 2 мая 2013 года . Проверено 21 марта 2013 года .
- ^ Политики лицензирования Mozilla , mozilla.org, заархивировано из оригинала 2 апреля 2013 г. , получено 26 марта 2013 г.
- ^ a b c Эйх, Брендан (21 июня 2011 г.). «Новый владелец модуля движка JavaScript» . BrendanEich.com. Архивировано 14 июля 2011 года . Проверено 1 июля 2011 года .
- ^ a b c Эйх, Брендан (3 апреля 2008 г.). «Популярность» . BrendanEich.com. Архивировано 3 июля 2011 года . Проверено 1 июля 2011 года .
- Перейти ↑ Eich, Brendan (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» . Ars Technica. Архивировано 6 мая 2012 года . Проверено 21 марта 2013 года .
- ^ Нетеркот Николай (1 ноября 2011). «Обезьяна-паук сидит на диете | Николас Нетеркот» . Blog.mozilla.com. Архивировано 28 марта 2012 года . Проверено 21 марта 2013 года .
- ^ «JaegerMonkey - быстрый JavaScript, всегда!» Таинственный театр залога » . Bailopan.net. 26 февраля 2010. Архивировано 24 марта 2013 года . Проверено 21 марта 2013 года .
- ↑ Пол, Райан (9 марта 2010 г.). «Mozilla заимствует у WebKit для создания нового быстрого движка JS» . Ars Technica. Архивировано 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 Notes - Рабочий стол" . Mozilla.org. 8 января 2013 года. Архивировано 2 сентября 2014 года . Проверено 21 марта 2013 года .
- ^ «Изменения JavaScript в MongoDB 3.2 - Руководство по MongoDB 3.4» . Архивировано 6 июня 2017 года . Проверено 23 ноября 2016 года .
- ^ «Релиз Riak 0.8 и JavaScript Map / Reduce» . Архивировано 3 ноября 2011 года . Проверено 24 апреля 2011 года .
- ^ «Документация Acrobat DC SDK» . help.adobe.com . Проверено 27 февраля 2020 года .
Базовый движок JavaScript перешел на версию 24.2 SpiderMonkey (базовый движок JavaScript от Mozilla).
- ^ Bolso, Эрик Инга (8 марта 2005). "Обзор браузера текстового режима 2005 г." . Linux Journal . Архивировано 15 марта 2010 года . Проверено 5 августа 2010 года .
- ^ Список рассылки wine-cvs Архивировано 7 февраля 2009 г. на Wayback Machine , 16 сентября 2008 г .: «jscript: добавлен компилятор регулярных выражений на основе реализации Mozilla regexp»
- ^ "SpiderMonkey> FOSS" . Веб-документы MDN . Проверено 2 апреля 2019 .
- ^ «Введение в оболочку JavaScript» . MDN . Сеть разработчиков Mozilla. 29 сентября 2010 года Архивировано из оригинала 29 июня 2011 . Проверено 14 декабря 2010 года .
Оболочка JavaScript - это программа командной строки, включенная в исходный дистрибутив SpiderMonkey.
[...] Вы можете использовать его как интерактивную оболочку [...] Вы также можете передать в командной строке файл программы JavaScript для запуска [...]
Внешние ссылки [ править ]
- Официальный сайт , движок SpiderMonkey (JavaScript-C)
- Документация для SpiderMonkey
- Страница Spidermonkey для ссылок с открытым исходным кодом
- Мы еще постимся? (Официальный тест и сравнение)