
Как Компилятор так и Интерпретатор имеют одно предназначение — конвертировать инструкции языка высокого уровня (как C или Java) в бинарную форму, понятную компьютеру. Это программное обеспечение, используемое для запуска высокоуровневых программ и кодов выполняемых различные задачи. Для разных высокоуровневых языков разработаны специфичные компиляторы/интерпретаторы. Не смотря на то что как компилятор так и интерпретатор преследуют одну и ту же цель, они отличаются способом выполнения своей задачи, то есть конвертирования высокоуровневого языка в машинные инструкции. В этой статье мы поговорим о базовой работе обоих и выделим главные отличия между компилятором и интерпретатором.
Компилятор
Компилятор транслирует высокоуровневый язык в машинный. Когда пользователь пишет код на языке высокого уровня, таком как Java, и хочет его выполнить, то прежде чем это может быть сделано, будет использован специальный компилятор разработанный для Java. Компилятор сначала сканирует всю программу, а потом транслирует ее в машинный код, который будет выполнен компьютерным процессором, после чего будут выполнены соответствующие задачи.
На картинке показано базовое очертание процесса компиляции. Тут программа написанная на языке высокого уровня показана как «Исходный код», а сконвертированный называется «Исполняемый код».
Интерпретатор
Интерпретаторы не очень сильно отличаются от компиляторов. Они также конвертируют высокоуровневые языки в читаемые машиной бинарные эквиваленты. Каждый раз когда интерпретатор получает на выполнение код языка высокого уровня, то прежде чем сконвертировать его в машинный код, он конвертирует этот код в промежуточный язык. Каждая часть кода интерпретируется и выполняется отдельно и последовательно, и если в какой-то части будет найдена ошибка, она остановит интерпретацию кода без трансляции следующей части кода.
Очертание процесса интерпретации на картинке выше показывает, что сначала исходный код конвертируется в промежуточную форму, а затем выполняется интерпретатором.
Ниже перечислены главные отличия между компилятором и интерпретатором:
- Интерпретатор берет одну инструкцию, транслирует и выполняет ее, а затем берет следующую инструкцию. Компилятор же транслирует всю программу сразу, а потом выполняет ее.
- Компилятор генерирует отчет об ошибках после трансляции всего, в то время как интерпретатор прекратит трансляцию после первой найденной ошибки.
- Компилятор по сравнению с интерпретатором требует больше времени для анализа и обработки языка высокого уровня.
- Помимо времени на обработку и анализ, общее время выполнения кода компилятора быстрее в сравнении с интерпретатором.
Источник тут.
Хотел написать толковую статью по этой теме, да нашёл её здесь. Спасибо за понятное изложение/перевод.
Очень хорошее изложение.Спасибо)
Так что же лучше (эффективнее) компилятор или интерпретатор?
Если важна скорость работы скрипта — то компилятор, если более удобная разработка то интерпретатор. Эффективнее конечно же компилятор, это очевидно из статьи.
Очень помогло спасибо больщое
Спасибо больше за понятное объяснение!
На вики мозг можно сломать. Там нету адекватного, понятного и простого объяснения.
Не понятно. Чем на схеме отличается «выполняемый код» от «машинного»? Почему выполняемый является промежуточным? Ведь промежуточный вроде должен быть у интерпретатора, а компилятор должен прямо в машинный переводить.