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

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

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