stringtranslate.com

V8 (движок JavaScript)

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 используется в следующем программном обеспечении:

Смотрите также

Ссылки

  1. ^ abcd "Документация · V8". Google . Получено 3 марта 2024 г. .
  2. ^ "Состояние платформы Chrome" . Получено 29 июня 2023 г.
  3. ^ "v8/LICENSE.v8 в master". Github.
  4. ^ ab Lenssen, Philipp (1 сентября 2008 г.). "Google в Google Chrome - комикс". Google Blogoscoped . Получено 17 августа 2010 г.
  5. ^ "V8: JavaScript-движок с открытым исходным кодом". YouTube . Google . Получено 15 марта 2024 г. .
  6. ^ "Большой сравнительный тест браузеров: Internet Explorer против Firefox, Opera, Safari и Chrome". PC Games Hardware . Computec Media AG. 3 июля 2009 г. Архивировано из оригинала 2 мая 2012 г. Получено 28 июня 2010 г.
  7. ^ Purdy, Kevin (11 июня 2009 г.). "Lifehacker Speed ​​Tests: Safari 4, Chrome 2". Lifehacker . Архивировано из оригинала 14 апреля 2021 г. . Получено 8 мая 2021 г. .
  8. ^ "Mozilla спрашивает: „Мы уже быстры?“". Wired . Архивировано из оригинала 22 июня 2018 года . Получено 18 января 2019 года .
  9. ^ "V8 JavaScript Engine: License". Google Code . Архивировано из оригинала 22 июля 2010 г. Получено 17 августа 2010 г.
  10. ^ "Новый коленчатый вал для V8". Chromium Blog . 7 декабря 2010 г. Получено 22 апреля 2011 г.
  11. ^ "Повышение производительности JavaScript с помощью TurboFan". 7 июля 2015 г. Получено 5 марта 2016 г.
  12. ^ "Экспериментальная поддержка WebAssembly в V8". v8.dev . Получено 12 марта 2024 г. .
  13. ^ "BlinkOn 6 Day 1 Talk 2: Ignition - an interpreter for V8". YouTube . 26 июня 2016 г. Архивировано из оригинала 21 декабря 2021 г. Получено 2 сентября 2016 г.
  14. ^ "Запуск Ignition и TurboFan". 16 мая 2017 г. Получено 13 июля 2017 г.
  15. ^ "Maglev - V8's Fastest Optimizing JIT". 5 декабря 2023 г. Получено 26 января 2024 г.
  16. ^ Verwaest, Toon (25 марта 2019 г.). "Blazingly fast parsing, part 1: optimizing the scanner · V8". v8.dev . Архивировано из оригинала 21 апреля 2021 г. . Получено 1 июня 2021 г. .
  17. ^ Хинкельманн, Франциска (19 декабря 2017 г.). «Понимание байт-кода V8». Medium . Получено 17 октября 2019 г. .
  18. ^ "Запуск интерпретатора Ignition · V8". v8.dev . Получено 30 сентября 2020 г. .
  19. ^ «Изменение правил игры для интерактивной производительности». blog.chromium.org . 21 ноября 2011 г. Получено 6 февраля 2022 г.
  20. ^ ab "Поддержка PPC для Google V8 становится общепринятой". 30 июня 2015 г. Архивировано из оригинала 12 сентября 2015 г.
  21. ^ "GitHub - ibmruntimes/v8ppc: Порт движка Google V8 javascript на PowerPC®". 21 апреля 2019 г. – через GitHub.
  22. ^ "Порт движка Google V8 JavaScript на z/OS. Порт Linux на Z поддерживается сообществом: ibmruntimes/v8z". 2 апреля 2019 г. – через GitHub.
  23. ^ "V8 Changelog v3.8.2". Архивировано из оригинала 22 октября 2012 г. Получено 23 октября 2012 г.
  24. ^ «Безопасная среда выполнения JavaScript/TypeScript, созданная с использованием V8, Rust и Tokio: denoland/deno». 8 июля 2019 г. – через GitHub.
  25. ^ "Обзор - Документация NativeScript". docs.nativescript.org .
  26. ^ Джоли О'Делл (10 марта 2011 г.). «Почему все говорят о Node». Mashable.

Внешние ссылки