JavaScript – это единственный известный мне язык, который, по мнению людей, не нужно изучать, прежде чем начать его использовать.

Дуглас Крокфорд

Обзор

Почти каждый, кто работал с JavaScript, слышал о движке V8. Идея движка JavaScript, и большинство людей знают, что JavaScript — это однопоточный язык, что он использует очередь обратного вызова.

Что это за двигатель, о котором мы хорошо говорим. Если я напишу код.

//javascript engine
const isArticleName = "Javascript Engine"

Представьте, что кто-то подходит к вам и дает вам компьютер, и они говорят вам привет! скажите этому компьютеру отобразить изображение лошадей на экране.

вы начинаете смотреть на этот компьютер и говорите компьютеру отображать изображение лошади или лошадей на французском языке, если компьютер вас поймет. Компьютер не будет знать, что вы только что сказали подобным образом.

Ну, компьютер понимает только единицы и нули в конце дня. И когда мы даем ему файл javascript, я как будто разговариваю с компьютером по-французски, а компьютер спрашивает: «О чем ты говоришь?»

Итак, как мы можем общаться с помощью файла javascript, чтобы компьютер отображал изображения лошадей, и это первый шаг в нашем обучении.

Эта машина поймет этот файл и скажет компьютеру, что делать, чтобы отобразить изображения лошадей.

В каком-то смысле вы только что создали переводчик, чтобы общаться с кем-то, кто не знает вашего языка, и этот специальный движок, называемый движком JavaScript, понимает javascript, который, наконец, понимает наш компьютер.

Это список популярных проектов, реализующих движок JavaScript:

  • V8 — открытый исходный код, разработанный Google, написанный на C++.
  • Rhino — управляется Mozilla Foundation, с открытым исходным кодом, полностью разработан на Java.
  • SpiderMonkey — первый движок JavaScript, который когда-то использовался в Netscape Navigator, а сегодня используется в Firefox.
  • JavaScriptCore — с открытым исходным кодом, продаваемый как Nitro и разработанный Apple для Safari.
  • KJS — движок KDE, первоначально разработанный Харри Портеном для веб-браузера Konqueror проекта KDE.
  • Чакра (JScript9) — Internet Explorer
  • Чакра (JavaScript) — Microsoft Edge
  • Nashorn, исходный код с открытым исходным кодом как часть OpenJDK, написанный Oracle Java Languages ​​and Tool Group
  • JerryScript — это облегченный движок для Интернета вещей.

Теперь эти движки пишутся программистами, например, движок V8 написан на C++.

Для чего был создан двигатель V8?

В 2008 году произошел действительно поворотный момент в истории JavaScript, поскольку до этого компания Google выпустила V8. Большинство браузеров использовали очень простые движки, что означало, что JavaScript был немного медленным. Вы видите, у Google была эта проблема. У них было что-то под названием Карты Google, а Карты Google, как вы знаете, требуют большой мощности.

Он делает много вещей, которые вы можете запросить, чтобы увеличить и уменьшить масштаб, может даже использовать Просмотр улиц и все предыдущие движки, прежде чем это сделает карты Google очень-очень медленными. > в браузере и Google, потому что они поисковая система. Они хотят, чтобы все пользовались их поисковой системой, и они создали браузер, чтобы контролировать большую часть рынка. Так что с Google Maps и их собственным браузером Chrome они сказали, что мы собираемся написать наш собственный механизм JavaScript, движок V8, чтобы JavaScript работал в браузере намного быстрее, чем раньше, и в 2008 году они выпустили V8. .

Теперь javascript работает максимально быстро в браузере на сервере или на любом компьютере. Поэтому с каждым днем ​​javascript становится для нас все быстрее и быстрее из-за работы, выполняемой этими движками.

Итак, мы знаем, что эта штука, называемая движком JavaScript, берет наш написанный код JavaScript и творит чудеса, чтобы заставить компьютер делать то, что мы от него хотим. Итак, что же происходит внутри этого двигателя. Язык программирования низкого уровня, но давайте посмотрим, что на самом деле происходит внутри этого движка.

Это выглядит примерно так: мы даем ему файл JavaScript, и сначала он выполняет нечто, называемое лексическим анализом, который разбивает код на нечто, называемое токенами, чтобы определить их значение. Чтобы мы знали, что пытается сделать код, и эти токены формируются в то, что мы называем AST (Абстрактное синтаксическое дерево). В Интернете доступен небольшой забавный инструмент, который вы можете использовать для демонстрации этого, если мы перейдем на https://astexplorer.net/

//javascript engine
function jsEngine(code){
  return code.split(/\s+/)
}
jsEngine('var a = 10')
//output
["var", "a", "=", "10"]

Вышеприведенный код принимает входные данные и преобразует их в строки, из этого мы создали простой движок.

Какую проблему или проблемы вы видите у всех, кто создает свои собственные движки на JavaScript?

Но помните наш список здесь, как он назывался ECMAScript Engine, а не движок JavaScript. Это потому, что если каждый сможет просто создать движок JavaScript, это будет просто полный хаос, поэтому был создан ECMAScript. Он говорит людям, что это стандарт, и как вы должны делать что-то в JavaScript и как он должен работать, а ECMAScript является руководящим органом JavaScript, который, по сути, решает, как следует стандартизировать язык.

Например Google действительно заинтересован в том, чтобы иметь самый быстрый движок, чтобы больше людей использовали свои браузеры Chrome, чтобы они использовали свою поисковую систему, чтобы они могли продавать больше рекламы и получать больше дохода.

Интерпретатор и компиляторы

Обзор

Давайте обсудим интерпретаторы и компиляторы, которые, как мы видим, являются важными частями нашего JavaScript.

Вы видите, что в программировании обычно есть два способа перевода на машинный язык или что-то, что наши компьютеры могут понять, это может быть любой язык программирования, такой как Javascript, Python, Java.

Устный переводчик

Что мы делаем, так это переводим и читаем файлы построчно на лету. Давайте посмотрим, как это работает.

function add(x, y){
  return x + y}
for(let i=0; i<=10; i++) {
  add(1, 1)
  console.log(i)}

У меня есть фрагмент кода, у меня есть функция, которая выполняет некоторые вычисления, и мы просто повторяем эти вычисления. Цикл повторяется снова и снова. Если я передам этот файл интерпретатору, перевод будет происходить построчно на лету, и именно так, по-вашему, код должен выполняться правильно. Интерпретатор видит первую строку. Затем вторая строка, затем третья строка и говорит: «Все в порядке, это функция». Затем он переходит к следующей части и говорит: «Хорошо, я должен перебрать это несколько раз, и он начинает выполнять какие-то вычисления». Интерпретация кода просто означает выполнение набора инструкций, подобных приведенным здесь, возвращение ответа и выполнение каких-либо действий с этим кодом.

Компилятор

Ну, компилятор, в отличие от интерпретатора, не переводит на лету. Что он делает, так это работает заранее, чтобы создать перевод того кода, который мы только что написали, и он обычно компилируется в язык, который может быть понят нашими машинами. Таким образом, компилятор пытается понять, что мы хотим сделать, берет наш язык и изменяет его на что-то другое, и обычно это происходит в нечто, называемое языком более низкого уровня, например машинный код.

У нас есть язык высокого уровня, такой как JavaScript, и мы запускаем фрагмент кода здесь, интерпретатор возьмет этот код построчно и выдаст такой байт-код, который выполнит этот код для нас, или компилятор может взять этот код и перейти через это и выплюнуть машинный код.