Каково различие между скомпилированным и интерпретируемым языком?

После чтения некоторого материала по этому предмету я все еще не уверен, каково различие между скомпилированным языком и интерпретируемым языком. Мне сказали, что это - одно из различий между Java и JavaScript. Кто-то помог бы мне в понимании его?

112
задан TylerH 8 March 2016 в 21:27
поделиться

4 ответа

В чем разница между компилируемым и интерпретируемым языком?

Разница не в языке; он находится в реализации .

Получив это из моей системы, вот ответ:

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

  • В интерпретируемой реализации исходная программа транслируется во что-то другое. Другая программа, называемая «интерпретатором», затем исследует «что-то еще» и выполняет требуемые действия. В зависимости от языка и его реализации существует множество форм «чего-то еще». От более популярных до менее популярных, «что-то еще» может быть

    • двоичными инструкциями для виртуальной машины, часто называемыми байт-кодом , как это делается в Lua, Python, Ruby, Smalltalk и многих других системах ( этот подход был популяризирован в 1970-х годах системой UCSD P и UCSD Pascal)

    • Древовидное представление исходной программы, такое как дерево абстрактного синтаксиса, как это делается для многих прототипов или образовательных интерпретаторов

    • Токенизированное представление исходной программы, подобное Tcl

    • . Символы исходной программы, как это было сделано в MINT и TRAC

. Проблема усложняется тем, что можно транслировать (компилировать) байт-код в машинные инструкции . Таким образом, успешная предполагаемая реализация может в конечном итоге получить компилятор. Если компилятор работает динамически, за кулисами, его часто называют оперативным компилятором или JIT-компилятором. JIT были разработаны для Java, JavaScript, Lua и, я полагаю, для многих других языков.На этом этапе у вас может быть гибридная реализация, в которой часть кода интерпретируется, а часть кода компилируется.

156
ответ дан 24 November 2019 в 02:49
поделиться

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

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

Компилировать исходный код означает запускать на нем программу, которая генерирует двоичный исполняемый файл, поведение которого при запуске определяется исходным кодом. Например, javac компилирует файлы .java, читаемые человеком, в машиночитаемые файлы .class.

Для интерпретации исходного кода на нем запускается программа, которая сразу же производит заданное поведение, без создания промежуточного файла. Например, когда ваш веб-браузер загружает stackoverflow.com, он интерпретирует кучу javascript (на который вы можете посмотреть, просматривая исходный код страницы) и производит множество приятных эффектов, которые имеют эти страницы, например, голосование за или небольшое уведомление. полосы сверху.

2
ответ дан 24 November 2019 в 02:49
поделиться

Компилятор, как правило, читает компьютерный код на языке более высокого уровня и преобразует его либо в p-код, либо в собственный машинный код. Интерпретатор запускается непосредственно из p-кода или интерпретируемого кода, такого как Basic или Lisp. Как правило, скомпилированный код выполняется намного быстрее, более компактен и уже обнаружил все синтаксические ошибки и многие ошибки недопустимых ссылок. Интерпретируемый код находит такие ошибки только после того, как приложение пытается интерпретировать затронутый код. Интерпретируемый код часто хорош для простых приложений, которые будут использоваться только один или максимум пару раз, или, возможно, даже для прототипирования. Скомпилированный код лучше подходит для серьезных приложений. Компилятор сначала принимает всю программу, проверяет наличие ошибок, компилирует ее, а затем выполняет. В то время как интерпретатор делает это строка за строкой, поэтому он берет одну строку, проверяет ее на наличие ошибок, а затем выполняет.

Если вам нужна дополнительная информация, просто введите в Google запрос «разница между компилятором и интерпретатором».

4
ответ дан 24 November 2019 в 02:49
поделиться

Java и JavaScript - довольно плохой пример, демонстрирующий эту разницу , потому что оба являются интерпретируемыми языками . Java (интерпретируемый) и C (или C ++) (скомпилированный) могли бы быть лучшим примером.

Почему зачеркнутый текст? Как этот ответ правильно указывает, интерпретируемый / скомпилированный касается конкретной реализации языка, а не языка как такового . Хотя такие утверждения, как «C - это скомпилированный язык», в целом верны, ничто не мешает кому-то написать интерпретатор языка C. Фактически, интерпретаторы для C существуют .

По сути, скомпилированный код может выполняться непосредственно центральным процессором компьютера. То есть исполняемый код указывается на «родном» языке ЦП ( язык ассемблера ).

Однако код интерпретируемых языков должен быть переведен во время выполнения из любого формата в машинные инструкции ЦП. Этот перевод выполняется переводчиком.

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

55
ответ дан 24 November 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: