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 году в V8 был добавлен интерпретатор Ignition с целью снижения использования памяти на телефонах Android с небольшим объемом памяти по сравнению с TurboFan и Crankshaft. [13] Ignition — это машина на основе регистров , имеющая схожую (хотя и не совсем такую же) конструкцию с интерпретатором шаблонов, используемым HotSpot.
В 2017 году V8 выпустил совершенно новый конвейер компилятора , состоящий из Ignition ( интерпретатор ) и TurboFan ( оптимизирующий компилятор ). Начиная с версии V8 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 непосредственно в машинный код, используя компиляцию «на лету» перед его выполнением. [18] Скомпилированный код дополнительно оптимизируется (и повторно оптимизируется) динамически во время выполнения на основе эвристики профиля выполнения кода. Используемые методы оптимизации включают в себя встраивание , исключение дорогостоящих свойств времени выполнения и встроенное кэширование . Сборщик мусора — это инкрементный сборщик поколений . [19]
V8 может компилироваться в архитектуры наборов инструкций x86 , ARM или MIPS как в 32-битных , так и в 64-битных редакциях; он также был портирован на PowerPC , [20] [21] и на IBM ESA/390 и z/Architecture , [22] [20] для использования на серверах. [23]
V8 может использоваться в браузере или интегрироваться в независимые проекты. V8 используется в следующем программном обеспечении: