V8 - это движок JavaScript с открытым исходным кодом, разработанный The Chromium Project для веб-браузеров Google Chrome и Chromium . [5] Создатель проекта - Ларс Бак . [6] Первая версия двигателя V8 был выпущен в то же самое время, что и первую версию Chrome: 2 сентября 2008 г. Он также был использован на стороне сервера, например , в Couchbase и Node.js .
Автор (ы) оригинала | Ларс Бак из Google |
---|---|
Разработчики) | Проект Chromium |
Первый выпуск | 2 сентября 2008 г . |
Стабильный выпуск | 9.0 [1] / 17 марта 2021 г . |
Репозиторий | |
Написано в | C ++ [2] |
Платформа | IA-32 , x86-64 , ARM , AArch64 , MIPS , MIPS64 [3] PowerPC , IBM s390 |
Тип | Движок JavaScript |
Лицензия | BSD [4] |
Веб-сайт | v8 |
История
Ассемблер V8 основан на ассемблере Strongtalk . [7] 7 декабря 2010 года была выпущена новая компилирующая инфраструктура под названием Crankshaft с улучшенной скоростью. [8] В версии Chrome 41 в 2015 году, проект турбовентиляторный было добавлено , чтобы обеспечить больше улучшения производительности с ранее сложными рабочими нагрузками , такими как asm.js . [9]
В 2016 году в V8 был добавлен интерпретатор Ignition с целью уменьшить использование памяти на телефонах Android с малым объемом памяти по сравнению с TurboFan и Crankshaft. [10]
В 2017 году V8 представила совершенно новый конвейер компилятора, состоящий из Ignition (интерпретатор) и TurboFan (оптимизирующий компилятор). Начиная с V8 версии 5.9, Full-codegen (ранний базовый компилятор) и Crankshaft больше не используются в V8 для выполнения JavaScript, поскольку команда полагала, что они больше не могут идти в ногу с новыми функциями языка JavaScript и оптимизациями, которые требуются . [11]
Дизайн
V8 сначала генерирует абстрактное синтаксическое дерево со своим собственным анализатором. [12] Затем Ignition, интерпретатор V8, генерирует байт-код из этого синтаксического дерева, используя внутренний формат байт-кода V8. [13] TurboFan - это оптимизирующий компилятор V8, он берет этот байт-код и генерирует из него машинный код. Другими словами, V8 компилирует JavaScript непосредственно в машинный код, используя своевременную компиляцию перед его выполнением. [14] Скомпилированный код дополнительно оптимизируется (и повторно оптимизируется) динамически во время выполнения на основе эвристики профиля выполнения кода. Используемые методы оптимизации включают в себя встраивание , исключение дорогостоящих свойств времени выполнения и встроенное кэширование . Сборщик мусор является поколениями инкрементного коллектора. [15]
Применение
V8 может компилироваться в архитектуры набора инструкций x86 , ARM или MIPS как в 32-, так и в 64-битных версиях; кроме того, он был перенесен на PowerPC [16] и IBM s390 [17] [18] для использования в серверах. [3] [19]
V8 можно использовать в браузере или интегрировать в независимые проекты. V8 используется в следующем программном обеспечении:
- Google Chrome и другие веб-браузеры на основе Chromium , включая Brave , Opera , Vivaldi и Microsoft Edge .
- Сервер базы данных Couchbase
- Среда выполнения Deno [20]
- Платформа настольных приложений Electron , используемая текстовыми редакторами Atom и Visual Studio Code
- Сервер базы данных MarkLogic
- Платформа мобильных приложений NativeScript [21]
- Среда выполнения Node.js [22]
- Среда выполнения Qt Quick [23]
Смотрите также
- Blink , движок браузера Chromium
- Сравнение движков JavaScript
Рекомендации
- ^ "Выпуск V8 v9.0" . Проверено 17 марта 2021 года .
- ^ "V8 JavaScript Engine" . Google LLC .
- ^ а б «Введение - Chrome V8» . Google Inc.
- ^ «v8 / LICENSE.v8 на мастере» . Github.
- ^ Ленссен, Филипп (1 сентября 2008 г.). «Гугл в Google Chrome - комикс» . Google Blogoscoped . Проверено 17 августа 2010 года .
- ^ Минто, Роб (27 марта 2009 г.). «Гений, стоящий за веб-браузером Google» . Financial Times . Архивировано 1 декабря 2011 года . Проверено 1 июня 2021 года .(требуется подписка)
- ^ «V8 JavaScript Engine: Лицензия» . Код Google . Архивировано из оригинала 22 июля 2010 года . Проверено 17 августа 2010 года .
- ^ «Новый коленчатый вал для V8» . Блог Chromium . 7 декабря 2010 . Проверено 22 апреля 2011 года .
- ^ «Повышение производительности JavaScript с помощью TurboFan» . 7 июля 2015 . Проверено 5 марта +2016 .
- ^ «BlinkOn 6 Day 1 Talk 2: Ignition - переводчик для V8» . 26 июня 2016 . Проверено 2 сентября 2016 года .
- ^ «Запуск зажигания и турбовентилятора» . 16 мая 2017 . Проверено 13 июля 2017 года .
- ^ Verwaest, Toon (25 марта 2019 г.). «Невероятно быстрый синтаксический анализ, часть 1: оптимизация сканера · V8» . v8.dev . Архивировано 21 апреля 2021 года . Проверено 1 июня 2021 года .
- ^ Хинкельманн, Франциска (19 декабря 2017 г.). «Понимание байт-кода V8» . Средний . Проверено 17 октября 2019 .
- ^ «Заведение интерпретатора зажигания · V8» . v8.dev . Проверено 30 сентября 2020 .
- ^ «Измените правила игры в интерактивном представлении» . Блог Chromium . Проверено 1 мая 2012 года .
- ^ «GitHub - ibmruntimes / v8ppc: перенос движка JavaScript Google V8 на PowerPC®» . 21 апреля 2019 г. - через GitHub.
- ^ «Перенос движка JavaScript Google V8 на z / OS. Порт Linux на Z поддерживается в сообществе: ibmruntimes / v8z» . 2 апреля 2019 г. - через GitHub.
- ^ «Поддержка PPC для Google V8 становится мейнстримом» . 30 июня 2015 г.
- ^ «Журнал изменений V8 v3.8.2» . Архивировано из оригинального 22 октября 2012 года . Проверено 23 октября 2012 года .
- ^ «Безопасная среда выполнения JavaScript / TypeScript, созданная с использованием V8, Rust и Tokio: denoland / identify» . 8 июля 2019 г. - через GitHub.
- ^ «Обзор - Документы NativeScript» . docs.nativescript.org .
- ^ Джоли О'Делл (10 марта 2011 г.). «Почему все говорят об узле» . Mashable.
- ^ «Разница между qt qml и qt quick» . Переполнение стека . Проверено 26 сентября 2020 .
Внешние ссылки
- Официальный веб-сайт