Разработчик (и) | Mozilla Foundation. Mozilla Corporation |
---|---|
Репозиторий | |
Написано на | C, C ++ |
Операционная система | Кроссплатформенность |
Платформа | IA-32, x86-64, ARM, MIPS, SPARC |
Тип | движок JavaScript |
Лицензия | MPL 2.0 |
Веб-сайт | spidermonkey.dev |
SpiderMonkey - это кодовое имя для первого движка JavaScript, написано Бренданом Эйхом в Netscape Communications, позже выпущено как с открытым исходным кодом и в настоящее время поддерживается Mozilla Foundation.
Эйх «написал JavaScript за десять дней» в 1995 году, будучи «завербованным в Netscape с обещанием« выполнить Scheme »в браузере». (От идеи использования Scheme отказались, когда «инженерное руководство [решило], что язык должен« выглядеть как Java »».) В конце 1996 года Эйху понадобилось «выплатить [] существенный технический долг "ушел с первого года", остался дома на две недели, чтобы переписать Mocha как кодовую базу, которая стала известна как SpiderMonkey ". (Mocha было первоначальным рабочим названием языка.) В 2011 году Eich передал управление кодом SpiderMonkey Дэйву Манделину.
Версия | Выпуск дата | Соответствующая версия 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 Server | |||
Старая версия, больше не поддерживается: 1.5 | ноябрь 2000 г. | ECMA-262 3-е издание | Netscape Navigator 6, Firefox 1.0 | |
Старая версия, больше не поддерживается: 1.6 | 2 ноября 005 | 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 для XML (E4X)) был удален в начале 2013 года.
SpiderMonkey написан на C /C ++ и содержит интерпретатор, IonMonkey JIT-компилятор и сборщик мусора.
TraceMonkey был первым JIT-компилятором, написанным для языка JavaScript. Первоначально представленный в качестве опции в бета-версии и представленный в блоге Брендана Эйха 23 августа 2008 г., компилятор стал частью основной версии как часть SpiderMonkey в Firefox 3.5, обеспечивая «повышение производительности в диапазоне от 20 и в 40 раз быстрее », чем интерпретатор базовой линии в Firefox 3.
Вместо компиляции целых функций TraceMonkey был трассирующей JIT, которая работает путем записи потока управления и типы данных во время выполнения интерпретатора. Эти данные затем послужили основой для построения Trace Trees, узкоспециализированных путей нативного кода.
. Улучшения JägerMonkey в конечном итоге сделали TraceMonkey устаревшим, особенно с разработкой вывода типа SpiderMonkey двигатель. TraceMonkey отсутствует в SpiderMonkey начиная с Firefox 11.
JägerMonkey, внутреннее имя MethodJIT, был JIT-компилятором всего метода, разработанным для повышения производительности в случаях, когда TraceMonkey не мог сгенерировать стабильный собственный код. Впервые он был выпущен в Firefox 4 и в конечном итоге полностью вытеснил TraceMonkey. Сам он был заменен на IonMonkey.
JägerMonkey работал совсем иначе, чем другие компиляторы в своем классе: в то время как типичные компиляторы работали, создавая и оптимизируя граф потока управления, представляющий функцию, JägerMonkey вместо этого действовал путем линейного итерации вперед через SpiderMonkey байт-код, внутреннее представление функции. Хотя это запрещает оптимизацию, требующую переупорядочения инструкций, компиляция JägerMonkey имеет преимущество в том, что она очень быстрая, что полезно для JavaScript, поскольку повторная компиляция из-за изменения типов переменных является частой.
Mozilla реализовала ряд критических оптимизаций в JägerMonkey, самое главное: полиморфные встроенные кеши и вывод типа.
Разница между методами JIT TraceMonkey и JägerMonkey, и необходимость в обоих была объяснено в статье на hacks.mozilla.org. Более подробное объяснение технических деталей было предоставлено Крисом Лири, одним из разработчиков SpiderMonkey, в сообщении блога. Более подробную техническую информацию можно найти в блогах других разработчиков: dvander, dmandelin.
IonMonkey - это название текущего JIT-компилятора JavaScript Mozilla, цель которого - включить много новых оптимизации, которые были невозможны с предыдущей архитектурой JägerMonkey.
IonMonkey - более традиционный компилятор: он переводит SpiderMonkey байт-код в граф потока управления, используя static форма единого присвоения (SSA) для промежуточного представления. Эта архитектура позволяет использовать хорошо известные оптимизации из других языков программирования для JavaScript, включая специализацию типов, встраивание функций, линейное сканирование распределение регистров, устранение мертвого кода и перемещение кода без цикла.
Компилятор может генерировать быстрые машинные переводы функций JavaScript на ARM, x86 и x86-64 платформы. Это движок по умолчанию, начиная с Firefox 18.
OdinMonkey - это название нового модуля оптимизации Mozilla для asm.js, легко компилируемого подмножества JavaScript. OdinMonkey сам по себе не является JIT-компилятором, он использует текущий JIT-компилятор. Он включен в Firefox, начиная с выпуска 22.
SpiderMonkey предназначен для встраивания в другие приложения, которые предоставляют среду хоста для JavaScript. Ниже приводится неполный список:
SpiderMonkey включает в себя оболочку JavaScript для интерактивной разработки JavaScript и для вызова программных файлов JavaScript из командной строки.