Компилятор VS интерпретатор: ключевые отличия

Интерпретаторы и компиляторы отвечают за преобразование языка программирования или сценариев (язык высокого уровня) в машинный код. Но если обе программы делают одно и то же, чем они различаются? Давайте разберемся.

Компилятор

Что такое компилятор?

Компилятор  —  это компьютерная программа, которая переводит компьютерный код с одного языка программирования на другой. Компилятор берет программу целиком и преобразует ее в исполняемый компьютерный код. Для этого требуется целая программа, так как компьютер понимает только то, что написано двоичным кодом. Задача компилятора  —  преобразовать исполняемую программу в машинный код, который и распознается компьютером. Примерами скомпилированных языков программирования являются C и C++.

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

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

Интерпретатор

Что такое интерпретатор?

Интерпретатор  —  это компьютерная программа, которая преобразует каждый программный оператор высокого уровня в машинный код. Сюда входят исходный код, предварительно скомпилированный код и сценарии.

Интерпретатор представляет собой машинную программу, которая непосредственно выполняет набор инструкций без их компиляции. Примерами интерпретируемых языков являются Perl, Python и Matlab.

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

Как это работает?

Сначала компилятор создает программу. Он анализирует все операторы языка, чтобы проверить, правильны они или нет. Если компилятор найдет какую-нибудь ошибку, он выдаст соответствующее сообщение. Если же он не обнаружит никаких ошибок, то преобразует исходный код в машинный. Компилятор связывает различные кодовые файлы в программы, которые можно запустить (например, формата .exe). После этого запускается программа.

Интерпретатор создает программу. Он не связывает файлы и не генерирует машинный код. Происходит построчное выполнение исходных операторов во время исполнения программы.

Преимущества и недостатки

Преимущества компилятора

  • Программный код уже переведен в машинный, и, следовательно, требуется меньше времени на его исполнение.
  • Файлы .exe выполняются быстрее, чем исходный код. Объектные программы сохраняются и могут быть запущены в любое время.
  • Объектные программы пользователю сложнее изменить, чем исходный код.
  • Компилятор проверяет исходный код на наличие синтаксических ошибок во время компиляции.

Недостатки компилятора

  • Поскольку переводится вся программа, она использует гораздо больше памяти компьютера.
  • При работе с компилятором невозможно изменить программу, не вернувшись к исходному коду.
  • Необходимо создавать объектную программу перед окончательным исполняемым файлом. Это может занять много времени.
  • Исходный код должен быть на 100% верным для создания исполняемого файла.

Преимущества интерпретатора

  • Интерпретатор значительно облегчает работу с исходным кодом.
  • Он переводит по одной инструкции за раз, поэтому использует минимальный объем памяти.
  • Интерпретатор может связать сообщения об ошибках с выполняемой инструкцией, что может оказаться полезным в процессе отладки.

Недостатки интерпретатора

  • Каждый раз, когда программа выполняется, тратится время на интерпретацию, из-за чего затягивается время исполнения.
  • Интерпретируемые программы могут выполняться только на компьютерах, на которых имеются соответствующие интерпретаторы.

Различия

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

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Platforuma India: Compiler Vs Interpreter

Предыдущая статьяМаршрутизация и получение данных в Next.js
Следующая статьяInput и Output в компонентах Angular