Страницы

Поиск по вопросам

пятница, 29 ноября 2019 г.

Разница между компилятором и интерпретатором

#компилятор #терминология #интерпретатор


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


Ответы

Ответ 1



Чтобы опеределить разницу, давайте узнаем, что это такое: Компиля́тор — программа или техническое средство, выполняющее компиляцию. Компиля́ция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера). Входной информацией для компилятора (исходный код) является описание алгоритма или программа на предметно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код). Википедия Интерпрета́тор — программа (разновидность транслятора), выполняющая интерпретацию. Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения). Википедия Таким образом, можно заключить, что компилятор приобразует исходный код к близкому к машинному коду. Интерпретатор же, позволяет выполнять некоторое представление программы, налету преобразуя в машинный код. Если взять язык java, то он имеет, как компилятор, так и интерпретатор. Компилятор преобразует исходный код в байткод. А байткод в начальной стадии выполнения программы обрабатывается интерпретатором. Компилятор, это отдельная программа javac, интерпретатор же встроен в jvm. Помимо обычного компилятора, в jvm присутствует just-in-time компиляция. т.к. интерпретация довольно медленна, то горячие места в программе компилируются в машинный код jit компилятором, тем самым ускоряя выполнение.

Ответ 2



1) Разница в том, что компилятор преобразует код алгоритмического языка в исполняемый (байт-код либо нативный) код (в пределе - в машинные коды), в то время как интерпретатор самостоятельно распознаёт и выполняет построчно инструкции программного кода. 2) Да, может. Даже древние turbo/quick basic - и те могли. Причём Borland Turbo BASIC был "в одном флаконе", в то время как Microsoft Quick Basic использовал, как и все современные, внешний компилятор. UPD: Наверное, можно ещё сформулировать так: интерпретатор для выполнения программы обязан располагать исходным кодом программы (в исходном либо формализованном виде) на алгоритмическом языке, в то время как компиляция создаёт исполняемый модуль, который не содержит текста программы на алгоритмическом языке. Также, если при компиляции не добавляется отладочная информация, невозможно полное восстановление исходного кода.

Ответ 3



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

Комментариев нет:

Отправить комментарий