ECMAScript · Engine · Runtime01 / 19

Язык, движок и среда исполнения

Чем отличаются правила JavaScript, реализация языка и окружение программы.

JavaScript — язык программирования. Чтобы понять, как работает программа, разделим три понятия: правила языка, движок и среду исполнения.

ECMAScript: правила языка

Основные правила JavaScript описаны в спецификации ECMAScript — ECMA-262. Она определяет синтаксис и поведение языка: как объявляются переменные, вызываются функции, работают объекты и операторы.

Спецификация описывает, что должна делать программа. Она не требует определённого интерпретатора или компилятора.

Движок: реализация языка

Движок JavaScript — программа, которая реализует эти правила: подготавливает и исполняет код, управляет объектами и памятью. CPU выполняет машинные инструкции; движок организует выполнение JavaScript через интерпретацию или компиляцию.

Пример · x86-64 · 5 байтОдна машинная инструкция
Байты в шестнадцатеричной записиНиже — те же байты в битах
B810111000
2A00101010
0000000000
0000000000
0000000000
Читаемая запись · ассемблерmov eax, 42

Записать число 42 в регистр EAX процессора.

Реальная кодировка инструкции MOV, выбранная для примера. Это не результат компиляции JavaScript в V8. Intel · MOV · том 2B, стр. 4-35.

V8 — один из таких движков. JavaScriptCore и SpiderMonkey — другие реализации того же языка.

Runtime: среда исполнения

Runtime — окружение, в которое встроен движок. Среда организует запуск программы и предоставляет дополнительные API.

Браузер предоставляет DOM, canvas и таймеры. Node.js — другая среда исполнения: она также использует V8, но предоставляет свой набор API, например для работы с файлами.

const player = { hp: 100 }; // Language values and objects
setTimeout(() => player.hp -= 10, 100); // Host timer API

Создание объекта и изменение hp подчиняются правилам языка. setTimeout предоставляет среда исполнения. Когда наступает время вызова, JavaScript-код callback выполняет движок.

ECMAScript

Правила языка

Браузер

DOM, canvas, таймеры

V8

Разбор и выполнение JavaScript, управление памятью

V8 реализует правила ECMAScript. Браузер встраивает движок и предоставляет внешние API.
Основной вывод
  1. ECMAScript — стандарт языка: синтаксис и поведение описаны в спецификации ECMA-262.
  2. Движок — программа, которая реализует правила языка и исполняет JavaScript. V8 — одна из реализаций.
  3. Runtime — среда исполнения, которая встраивает движок и предоставляет программе внешние API.

Проверить по первоисточнику ↗

ECMA-262 · Hosts and Implementations↗Различает язык, реализацию и окружение.V8 · устройство движка↗Документация реализации V8; не нормативное описание всех JS-движков.HTML Standard · Timers↗Таймеры setTimeout и setInterval предоставляет среда браузера.