Можно ли считать Javascript интерпретируемым языком при использовании Google Chrome (V8)?

Я читал эту отличную статью о V8, движке Google Javascript: https://developers.google.com/v8/design#mach_code.

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

Цитировать:

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

Итак, почему Javascript все еще указан вместе с языками «сценариев» и «интерпретируемых», когда он явно скомпилирован (по крайней мере, в V8)?



Изменить: могу ли я каким-то образом создать исполняемый файл из Javascript, если он скомпилирован? Для этого потребуется как-то связать его с V8?

Обдумывая этот вопрос, я нашел эту цитату:

V8 может работать автономно или может быть встроен в любое приложение C ++.

Здесь: http://code.google.com/p/v8/.


person corazza    schedule 10.07.2012    source источник
comment
Если это так, то это больше не [java] скрипт. С таким же успехом можно было бы назвать это JavaCompiled :)   -  person Quintium    schedule 11.07.2012
comment
Блин, но JavaScript звучит так ... Сочно.   -  person corazza    schedule 11.07.2012
comment
@Quintium, Java действительно не имеет ничего общего с javascript ... Прочтите stackoverflow.com/questions/245062/ и developer.mozilla .org / en / About_JavaScript   -  person Gabriele Petrioli    schedule 11.07.2012
comment
Я не думаю, что он имел в виду, @ GabyakaG.Petrioli, он просто разделил слова ...   -  person corazza    schedule 11.07.2012
comment
да ... но, разделяя слова, он подразумевает, что часть java имеет значение сама по себе ... (в любом случае ... я просто заявляю это для случайный читатель ..)   -  person Gabriele Petrioli    schedule 11.07.2012
comment
@ GabyakaG.Petrioli - Я знаю, что это не Java. Это была шутка над словами. Вызов чего-либо с помощью скрипта, но вместо этого его компилирует, просто меняет ситуацию. Извините за то, что сбил вас с толку.   -  person Quintium    schedule 11.07.2012
comment
@Quintium достаточно честно .. просто нужно было убедиться: p   -  person Gabriele Petrioli    schedule 11.07.2012


Ответы (3)


Вот почему «интерпретируемый язык» и «компилируемый язык» являются примерами небрежной терминологии. Компилируется или интерпретируется язык - это атрибут реализации, а не самого языка.

Многие путают «динамически типизированные языки» (например, JavaScript) с «интерпретируемым» и «статически типизированный язык» с «скомпилированным», но это просто корреляции, а не абсолютные значения. Можно скомпилировать динамический язык (хотя обычно это сложнее, чем компилировать статический), и можно интерпретировать статический язык (например: Hugs - это интерпретатор для Haskell).

person Laurence Gonsalves    schedule 10.07.2012

Это язык сценариев, потому что код JS предназначен для использования в качестве исходного кода.

Если бы кодировщик предоставил вам скомпилированный двоичный файл для выполнения, это не был бы сценарий.

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

Даже если вы дойдете до крайности в его компиляции, JS по-прежнему остается языком сценариев. Существуют подходящие традиционные компиляторы, доступные практически для каждого языка сценариев, о котором вы только можете подумать (Perl, PHP ....); это не мешает им быть языками сценариев, а их исходный код - сценарием.

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

Наконец, проблема еще больше осложняется концепцией «компиляции» одного языка в другой. Это существует некоторое время, но идея действительно взлетела с такими языками, как Coffeescript, которые предназначены для компиляции в Javascript. Так как вы называете скомпилированный код Coffeescript?

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

person Spudley    schedule 10.07.2012

Здесь позвольте мне продемонстрировать код:

  later(); // prove that js is a compiling language
  function later(num) {
    console.log("Your number is: " + num);
  }

Этот фрагмент кода может работать как в браузере Chrome, так и в Node js.

Если кто-то скажет, что js - это интерпретируемый язык, тогда этот фрагмент кода выйдет из строя, так как при запуске функции later () он не должен знать тело функции более поздней версии.

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

person Xin    schedule 03.08.2016
comment
На самом деле это связано с подъемом. - person Ben Rivers; 23.04.2018