Является ли JIT-компилятор компилятором или интерпретатором? - PullRequest
12 голосов
/ 22 февраля 2011

Мой вопрос заключается в том, является ли JIT-компилятор, который преобразует IL в машинный язык, именно компилятором или интерпретатором.

Еще один вопрос: Является ли HTML, JavaScript компилируемым или интерпретируемым языком?

Заранее спасибо

Ответы [ 7 ]

11 голосов
/ 22 февраля 2011

JIT (как раз вовремя) компилятор является компилятором. Это делает оптимизацию так же как компиляцию к машинному коду. (и даже называется компилятором)

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

8 голосов
/ 22 февраля 2011

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

Что касается Javascript, сделать различие здесь сложнее. Если вы хотите быть педантичным, не существует такого понятия, как «скомпилированный язык» или «интерпретируемый язык». Я имею в виду, что на практике большинство языков имеют один общий способ их использования, и если это интерпретатор, их обычно называют интерпретируемыми языками, но интерпретация или компиляция (обычно) не являются чертами самого языка. Python почти повсеместно считается интерпретируемым, но можно написать компилятор, который компилирует его в собственный двоичный код; это все еще заслуживает «истолкованного» прилагательного?

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

6 голосов
/ 22 февраля 2011

Из Wiki just-in-time compiler(JIT), также известный как динамический переводчик, используется для улучшения производительности компьютерных программ во время выполнения.

Just-in-time compilation - это преобразование неродного кода, например, байт-кода, в нативный код непосредственно перед его выполнением. JIT compiler - это тот, кто компилирует код IL и выводит нативный код, который кэшируется, где как интерпретатор будет выполнять построчный код,
т.е. в случае java файлы классов являются входными данными для интерпретатора.

Подробнее о JIT здесь:

Да, HTML, JavaScript являются интерпретируемыми языками, поскольку они не скомпилированы ни в один код. Это означает, что скрипты выполняются без предварительной компиляции.

Также хорошее чтение здесь на JavaScript / HTML, не являющемся компилируемыми языками.

2 голосов
/ 22 февраля 2011

JIT-процессоры, такие как IL, в основном компиляторы. Процессоры JavaScript в основном являются интерпретаторами. Я понимаю ваше любопытство к этому вопросу, но лично я пришел к выводу, что на самом деле нет «правильного» ответа.

Существуют интерпретаторы JavaScript, которые компилируют части или весь код по соображениям эффективности. Это действительно переводчики?

JIT действует во время выполнения, поэтому его можно понимать как умный, высоко оптимизированный интерпретатор. Что это?

Это как вопросы "это растение" или "это животное". Существуют живые вещи, которые не совсем вписываются ни в одну из форм: природа - это то, что есть природа, а «классификация» вещей - это чисто человеческое интеллектуальное усилие, которое имеет свои ограничения. Даже такие рукотворные вещи, как «код», подчиняются тем же соображениям.

Ok; так что, возможно, есть один правильный ответ:

Способ обработки JavaScript (скажем, 5 лет назад) называется «Интерпретатор». Способ обработки C ++ считается «компилятором».

Способ обработки IL - просто ... a 'JIT' .

1 голос
/ 23 февраля 2011

HTML не является языком программирования, поэтому трудно сказать, скомпилирован он или интерпретирован ... В смысле «если результат компиляции используется повторно», HTML не компилируется никакими браузерами (он анализируется каждый раз, когда страницаrenderd).

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

1 голос
/ 22 февраля 2011

CLI (.Net bytecode) имеет функции, которых нет в родных процессорах, поэтому JIT является наиболее определенным компилятором. Вопреки тому, что некоторые пишут здесь, большинство оптимизаций уже было сделано.

0 голосов
/ 14 октября 2016

JIT (Just In Time) компилятор является только компилятором, а не интерпретатором , потому что JIT-компилятор компилирует или преобразует определенные фрагменты байт-кодов в собственный машинный код во время выполнения для высокой производительности, но это делает не выполняйте инструкции.

Принимая во внимание, что переводчик читает и выполняет инструкции во время выполнения.

HTML и Javascript интерпретируются , он напрямую выполняется браузером без компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...