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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

если вам нужна дополнительная информация, просто Google для "разницы между компилятором и интерпретатором"

Ответ 4

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

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

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

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

Ответ 5

Интерпретированный язык выполняется во время выполнения в соответствии с инструкциями, например, в сценариях оболочки, а скомпилированный язык - это тот, который скомпилирован (изменен на язык ассемблера, который может понять ЦП), а затем выполняется как в С++.