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

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

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

Внимание: разделение ЯП на компиляторы и интерпретаторы условное, так как тот же интерпретатор может быть сформирован абсолютно для любого из них.

P-код, или независимый от аппаратного элемента. Его использует Java, Python, Perl и т. д. Под P-кодом чаще всего подразумевается алгоритм аппаратно-независимого кода: при инициализации программы начинается его интерпретация. При этом исходный код автоматически конвертируется в двоичный. 

Не стоит смешивать истинный машинный код и P-код. Первый имеет более сложное устройство, а второй гораздо мощнее, чем машинный

Изначально концепция аппаратно-независимого P-кода задумывалась как гибрид: компилятор + интерпретатор.

Компилируемые языки программирования

Этот вид можно назвать стандартным, так как он более распространен. Из примеров можно назвать Ada, C (Objective-C и C++), Pascal, Swift, Fortran, Rust, Delphi, D и множество других.

Эти языки работают следующим образом: 

  1. Исходный код преобразуется программой-компилятором.
  2. Образуется машинный код.
  3. Машинный код заносится в файл. Такой файл имеет уникальное расширение или заголовок (что-то одно или оба сразу).
  4. Созданный файл исполняется ОС. 

Компилируемые типы позволяют запускать созданные двоичные коды без учета исходника. Еще один маркер этой категории — высочайшая скорость выполнения.

Как правило, компилируемые ЯП имеют более сложное устройство, кроме того — они труднее непосредственно в плане кодинга

Ведь машинный код (сформированный в ходе компиляции) не может быть прочитан человеком. Зато все функции операционной системы в них обычно доступны изначально.

Процесс компиляции для языков на основе C. Компилятор — это как переводчик с человеческого на машинный
Процесс компиляции для языков на основе C. Компилятор — это как переводчик с человеческого на машинный

Интерпретируемые языки программирования

Этот вид отличается тем, что исходник (изначальный код программы) исполняется через интерпретацию. Примеры таких языков — Python, PHP, Ruby, Perl. В отличие от компилируемых вариантов, интерпретируемые содержат инструкции, которые не должны выполняться машиной. Это работа делегируется иной программе.

Специально для Вас:  Лучшие IT-вакансии 2024 года: профессии, которые будут востребованы в этом году

Интерпретаторы выполняют написанную программу построчно. Эта категория допускает просчеты и позволяет совершать некоторые ошибки — выполнение кода не пострадает

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

В целом интерпретируемые языки считаются более простыми в написании и тестировании, хотя это субъективно
В целом интерпретируемые языки считаются более простыми в написании и тестировании, хотя это субъективно

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

Изначально интерпретируемые языки были заметно медленнее, чем компилируемые, сейчас эта тенденция выровнялась. Минусы: нет такого широкого вызова функций ОС как в компилируемых вариантах.

Интерпретируемые ЯП работают следующим образом:

  1. Программа-интерпретатор сканирует исходник.
  2. Исходный код переводится в необходимые вычисления. Параллельно выполняются сопутствующие операции, например, создание системных вызовов.
  3. Исходник интерпретируется повторно до тех пор, пока не будет выполнена программа.

Главное, что нужно запомнить: в случае с интерпретируемыми ЯП с программой функционирует не само ядро ОС, а интерпретатор.

Приложение, использующее libvorbisfile для воспроизведения файла Ogg Vorbis
Приложение, использующее libvorbisfile для воспроизведения файла Ogg Vorbis

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

Python — это компилируемый или интерпретируемый язык?

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

Специально для Вас:  Как отключить Apple Music на МТС: пошаговая инструкция

Да, во многих моментах Python функционирует как настоящий интерпретируемый язык, но код перед выполнением всё равно компилируется

Java — это компилируемый или интерпретируемый язык?

Здесь тоже всё не так просто. Вообще Java изначально компилируется в промежуточный код, после этот байт-код конвертируется и затем переходит в виртуальную машину Java. В свою очередь, уже эта ВМ интерпретирует полученный код необходимым образом.

Java задействует так называемую JIT-компиляцию, которая необходима для создания машинного кода, хотя (если брать последовательно) сперва этот код конвертируется в интерпретируемое воплощение

1 thought on “Разницу между компилируемыми и интерпретируемыми языками: все факторы”

  1. Жук навозный

    Наконец то нормальная статья объясняющая разницу между компиляцией и интерпретацией. Спасибо

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

МирДоступа Яндекс.Метрика