Подтвердить что ты не робот

В чем разница между JavaScript Engine и JavaScript Runtime Environment

Я немного смущен, может кто-нибудь помочь описать, Какая разница между JavaScript Engine и JavaScript Runtime Environment. BTW, Event Loop был реализован в Engine или Runtime?

4b9b3361

Ответ 1

В отличие от C и других скомпилированных языков, Javascript запускается в контейнере - программе, которая считывает ваши js-коды и запускает их. Эта программа должна делать две вещи

  • проанализируйте свой код и преобразуйте его в исполняемые команды
  • предоставить некоторые объекты javascript, чтобы он мог взаимодействовать с внешним миром.

Первая часть называется Engine, вторая - Runtime.

Например, Chrome Browser и node.js используют тот же движок - V8, но их Runtimes разные: в Chrome у вас есть объекты window, DOM и т.д., а node дает вам require, Буферы и процессы.

Ответ 2

Предположим сначала представить компиляцию JavaScript с использованием Ahead-Of-Time.

Компилятор переведет код JavaScript, например, собственный машинный код x86, который вы можете запустить. Однако в JavaScript есть некоторые вещи, которые происходят во время выполнения, и поэтому их нельзя статически компилировать. Сбор мусора, например, или отражение. Таким образом, для того, чтобы программа запускалась, во время выполнения должны быть какие-то службы поддержки, такие как сборщик мусора и система отражения. Кроме того, JavaScript имеет eval, что означает, что (в нашей гипотетической скомпилированной реализации) сам компилятор или какой-либо другой интерпретатор должны быть доступны во время выполнения.

Позвольте этим службам поддержки Runtime.

Вторая вещь, которая должна быть доступна для программы, - это такие объекты, как Array, Function, Object и т.д. и такие функции, как forEach. Этот набор объектов и функций, которые должны быть доступны программе из get-go, обычно называется базовой библиотекой или базовой библиотекой. Для языка, такого как JavaScript, который предназначен для встраивания, есть также дополнительные библиотеки, которые предполагается присутствовать в зависимости от контекста. Например, для JavaScript, встроенного в браузер, мы ожидаем, что объекты и функции DOM и глобальные объекты window и document и т.д. Будут существовать. Они также могут считаться частью основной библиотеки.

И, наконец, давайте теперь забудем о нашем гипотетическом компиляторе и посмотрим на интерпретатора (или JIT-компилятор или механизм смешанного режима или байт-код VM). Здесь интерпретатор (или JIT, или что-то еще) является третьим кусочком головоломки. Это то, что на самом деле выполняет программу JavaScript. (Ну, технически, JIT не выполняется, он компилируется, а затем выполняется другое.)

Терминология не на 100% понятна: иногда только службы поддержки Runtime называются средой выполнения, иногда также включена базовая библиотека.

Механизм выполнения ссылается либо на интерпретатор (JIT, VM,...), либо на комбинацию интерпретатора и среды выполнения. Компилятор никогда не называется механизмом выполнения (он ничего не выполняет, просто переводит на другой язык), а термин "Механизм выполнения" редко используется для ссылки на статически скомпилированную реализацию.

Цикл событий является частью среды хоста, а не реализацией JavaScript.

Ответ 3

Представьте, что робот играет музыку:

  • Код JavaScript - это музыкальные заметки для робота.
  • Механизм TheJavaScript был бы роботом, который мог бы понимать заметки и действовать на нем.
  • Время выполнения JavaScript - это инструменты, которые робот может использовать для воспроизведения музыки.

Представьте, что робот выдает огонь:

  • Код JavaScript будет инструкцией для робота, чтобы потушить огонь.
  • Механизм JavaScript будет роботом, который может понять инструкции и действовать на нем.
  • Время выполнения JavaScript - это пожарная машина и водяной пистолет.