Означает ли это, что JavaScript не является интерпретированным языком в V8?
Ответ на этот вопрос «это зависит».
Исторически V8 была составлено непосредственно в машинный код, используя свой «полную» CodeGen компилятор, который производит неоптимизированный код, который использует inline caching для выполнения большинства операций, таких как арифметические операции, нагрузка и сохраняют переменные и свойства, и т.д.
Код, созданный full-codegen, отслеживает, как «горячая» каждая функция, путем настройки счетчика при вызове функции и при переходе к вершине циклов.
Он также отслеживает типы переменных, используемых в каждом выражении.
Если он определяет, что функция (или часть функции) очень горячая, и она собрала достаточно информации о типе, она запускает компилятор «Коленчатый вал», который генерирует гораздо лучший код.
Однако разработчики V8 активно работают над переходом в другую систему, где они начинают с интерпретатора под названием «Ignition», а затем используют компилятор под названием «Turbofan» для создания оптимизированного кода для горячих функций.
Вот несколько сообщений от разработчиков V8 блог, описывающий это:
ли V8 использовать сборник подход только в срок для JavaScript ?
Да, несколькими способами.
Во-первых, он имеет ленивый разбор и ленивый механизм компиляции. Это означает, что когда он анализирует исходный файл Javascript, он с готовностью анализирует внешний охват, генерируя код полного кода сразу.
Однако для функций, определенных в файле, он пропускает их и просто записывает имя функции и местоположение ее исходного кода. Он генерирует фиктивную функцию, которая просто вызывается в среду выполнения V8, чтобы инициировать фактическую компиляцию функции.
Во-вторых, он имеет двухступенчатый конвейер, как описано выше, с использованием коленчатого вала + коленчатого вала + зажигания + турбовентилятора.
Когда сгенерирована компиляция, изначально будет генерироваться неоптимизированный код или байт-код зажигания (который он может сделать очень быстро), а затем, если код горячий, он запускает оптимизированную перекомпиляцию (которая намного медленнее, но генерирует много лучший код).
Из [wiki] (https://github.com/v8/v8/wiki/Design%20Elements#dynamic-machine-code-generation): * «V8 компилирует исходный код JavaScript непосредственно в машинный код, когда он 1). – UnholySheep
@UnholySheep: вики устарели: https://v8project.blogspot.co.uk/2017/02/help-us-test-future- of-v8.html –
«Означает ли это, что JavaScript не является интерпретированным языком в V8?» - Нет такого понятия, как «интерпретируемый язык». Язык - это язык. Период. Интерпретация и компиляция являются чертами интерпретатора или компилятора (duh!), А не языка. –