V8 (движок JavaScript)
Разработчик(и) | Google [1] |
---|---|
Первоначальный выпуск | 2 сентября 2008 г |
Стабильная версия | 11.4 [2] / 24 мая 2023 г |
Репозиторий | |
Написано в | С++ [1] |
Платформа | IA-32 , x86-64 , 32-битный ARM , AArch64 , 32-битный MIPS , MIPS64 , PowerPC , IBM ESA/390 , z/Architecture |
Тип | JavaScript и WebAssembly Движок |
Лицензия | БСД [3] |
Веб-сайт | v8 |
V8 — это движок JavaScript и WebAssembly, разработанный Google для Chrome браузера . [1] [4] V8 — это бесплатное программное обеспечение с открытым исходным кодом , которое является частью проекта Chromium , а также используется отдельно в контекстах, не связанных с браузером, в частности в Node.js. времени выполнения системе [1]
История
[ редактировать ]Google создал V8 для своего браузера Chrome , и оба они были впервые выпущены в 2008 году. [4] Ведущим разработчиком V8 был Ларс Бак , и он был назван в честь мощного автомобильного двигателя . [5] В течение нескольких лет Chrome быстрее других браузеров выполнял JavaScript . [6] [7] [8]
V8 Ассемблер основан на ассемблере Strongtalk . [9] 7 декабря 2010 года была выпущена новая инфраструктура компиляции под названием Crankshaft с повышенной скоростью. [10] В версии 41 Chrome в 2015 году был добавлен проект TurboFan, чтобы обеспечить большее повышение производительности при работе с ранее сложными рабочими нагрузками, такими asm.js. как [11] Большая часть разработки V8 во многом вдохновлена виртуальной машиной Java HotSpot, разработанной Sun Microsystems , причем новые конвейеры выполнения очень похожи на конвейеры HotSpot.
Поддержка нового языка WebAssembly началась в 2015 году. [12]
В 2016 году интерпретатор Ignition был добавлен в V8 с целью сокращения использования памяти с небольшой памятью на телефонах Android по сравнению с TurboFan и Crankshaft. [13] Ignition — это машина на основе регистров , имеющая схожий (хотя и не совсем такой же) дизайн с интерпретатором шаблонов, используемым HotSpot.
В 2017 году V8 выпустила совершенно новый конвейер компилятора , состоящий из Ignition ( интерпретатор ) и TurboFan ( оптимизирующий компилятор ). Начиная с версии 5.9, Full-codegen (первый базовый компилятор) и Crankshaft больше не используются в V8 для выполнения JavaScript, поскольку команда считала, что они больше не могут идти в ногу с новыми функциями языка JavaScript и оптимизацией, которую эти функции требуют. . [14]
В 2021 году с выпуском компилятора SparkPlug был представлен новый многоуровневый конвейер компиляции, который дополняет существующий компилятор TurboFan в V8 и является прямой параллелью компилятору профилирования C1, используемому HotSpot.
В 2023 году был добавлен компилятор на основе Maglev SSA , который в 10 раз медленнее, чем Sparkplug, но в 10 раз быстрее, чем TurboFan, устраняя разрыв между Sparkplug и TurboFan для менее часто выполняемых циклов, которые не становятся достаточно «горячими», чтобы их можно было оптимизировать с помощью TurboFan, как и большинство веб-приложений, которые тратят больше времени на взаимодействие с браузером, чем на выполнение JavaScript. [15]
Дизайн
[ редактировать ]V8 сначала генерирует абстрактное синтаксическое дерево с помощью собственного анализатора. [16] Затем Ignition генерирует байт-код из этого синтаксического дерева, используя внутренний формат байт-кода V8 . [17] TurboFan компилирует этот байт-код в машинный код. Другими словами, V8 компилирует ECMAScript непосредственно в машинный код, используя JIT-компиляцию перед его выполнением. [18] Скомпилированный код дополнительно оптимизируется (и повторно оптимизируется) динамически во время выполнения на основе эвристики профиля выполнения кода. Используемые методы оптимизации включают встраивание , исключение дорогостоящих свойств времени выполнения и встроенное кэширование . Сборщик мусора — это сборщик поколений инкрементальный . [19]
Использование
[ редактировать ]V8 может компилироваться в x86 , ARM или MIPS архитектуры набора команд как в 32-битной , так и в 64-битной версиях; он дополнительно портирован на PowerPC , [20] [21] и IBM ESA/390 и z/Architecture , [22] [20] для использования на серверах. [23]
V8 можно использовать в браузере или интегрировать в независимые проекты. V8 используется в следующем программном обеспечении:
- Chromium на базе Веб-браузеры — Google Chrome , Brave , Opera , Vivaldi и Microsoft Edge .
- Couchbase Сервер базы данных
- Deno Среда выполнения [24]
- Платформа настольных приложений Electron , используемая Atom и Visual Studio Code. текстовыми редакторами
- MarkLogic Сервер базы данных
- NativeScript Платформа мобильных приложений [25]
- Node.js Среда выполнения [26]
- Qt Быстрая среда выполнения [27]
См. также
[ редактировать ]- Blink , движок браузера Chromium.
Ссылки
[ редактировать ]- ^ Jump up to: а б с д «Документация · V8» . Google . Проверено 3 марта 2024 г.
- ^ «Состояние платформы Chrome» . Проверено 29 июня 2023 г.
- ^ «v8/LICENSE.v8 у мастера» . Гитхаб.
- ^ Jump up to: а б Ленссен, Филипп (1 сентября 2008 г.). «Google в Google Chrome — комикс» . Google провел блогоскопию . Проверено 17 августа 2010 г.
- ^ «V8: движок JavaScript с открытым исходным кодом» . Ютуб . Google . Проверено 15 марта 2024 г.
- ^ «Большой сравнительный тест браузеров: Internet Explorer против Firefox, Opera, Safari и Chrome» . Аппаратное обеспечение для компьютерных игр . Компьтек Медиа АГ. 3 июля 2009 г. Архивировано из оригинала 2 мая 2012 г. Проверено 28 июня 2010 г.
- ^ Парди, Кевин (11 июня 2009 г.). «Тесты скорости Lifehacker: Safari 4, Chrome 2» . Лайфхакер . Архивировано из оригинала 14 апреля 2021 года . Проверено 8 мая 2021 г.
- ^ «Mozilla спрашивает: «Мы уже быстры?» " . Проводной . Архивировано из оригинала 22 июня 2018 года . Проверено 18 января 2019 г.
- ^ «JavaScript Engine V8: Лицензия» . Гугл-код . Архивировано из оригинала 22 июля 2010 года . Проверено 17 августа 2010 г.
- ^ «Новый коленвал для V8» . Блог Хрома . 7 декабря 2010 года . Проверено 22 апреля 2011 г.
- ^ «Повышение производительности JavaScript с помощью TurboFan» . 7 июля 2015 года . Проверено 5 марта 2016 г.
- ^ «Экспериментальная поддержка WebAssembly в V8» . v8.dev . Проверено 12 марта 2024 г.
- ^ «BlinkOn 6 Day 1 Talk 2: Ignition — интерпретатор для V8» . Ютуб . 26 июня 2016 г. Архивировано из оригинала 21 декабря 2021 г. Проверено 2 сентября 2016 г.
- ^ «Запуск зажигания и TurboFan» . 16 мая 2017 года . Проверено 13 июля 2017 г. .
- ^ «Маглев — самая быстрая оптимизация V8» . 5 декабря 2023 г. Проверено 26 января 2024 г.
- ^ Верваэст, Мульт (25 марта 2019 г.). «Невероятно быстрый парсинг, часть 1: оптимизация сканера · V8» . v8.dev . Архивировано из оригинала 21 апреля 2021 года . Проверено 1 июня 2021 г.
- ^ Хинкельманн, Франциска (19 декабря 2017 г.). «Понимание байт-кода V8» . Середина . Проверено 17 октября 2019 г.
- ^ «Запуск интерпретатора зажигания · V8» . v8.dev . Проверено 30 сентября 2020 г.
- ^ «Изменение правил игры в интерактивном представлении» . blog.chromium.org . 21 ноября 2011 года . Проверено 6 февраля 2022 г.
- ^ Jump up to: а б «Поддержка PPC для Google V8 становится массовой» . 30 июня 2015 г. Архивировано из оригинала 12 сентября 2015 г.
- ^ «GitHub — ibmruntimes/v8ppc: порт JavaScript-движка Google V8 на PowerPC®» . 21 апреля 2019 г. – через GitHub.
- ^ «Перенос JavaScript-движка Google V8 на z/OS. Порт Linux on Z поддерживается сообществом: ibmruntimes/v8z» . 2 апреля 2019 г. – через GitHub.
- ^ «Журнал изменений V8 v3.8.2» . Архивировано из оригинала 22 октября 2012 года . Проверено 23 октября 2012 г.
- ^ «Безопасная среда выполнения JavaScript/TypeScript, созданная с использованием V8, Rust и Tokio: denoland/deno» . 8 июля 2019 г. – через GitHub.
- ^ «Обзор — Документация NativeScript» . docs.nativescript.org .
- ^ Джоли О'Делл (10 марта 2011 г.). «Почему все говорят об Node» . Машаемый.
- ^ «Разница между qt qml и qt fast» . Переполнение стека . Проверено 26 сентября 2020 г.