Найти тему

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

Оглавление

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

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

Но такие команды всё еще требовалось переводить в двоичный код, поэтому были созданы трансляторы (интерпретаторы и компиляторы).

Варианты трансляции программы.
Источник: https://pbs.twimg.com/media/ECrxKIhXkAAXESo.jpg
Варианты трансляции программы. Источник: https://pbs.twimg.com/media/ECrxKIhXkAAXESo.jpg

Итак, трансляция программы – преобразование программы, представленной на одном из языков программирования, в программу на другом языке.

В программировании в основном выделяют два вида трансляции: компиляция и интерпретация.

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

Компиляция

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

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

Достоинства компиляции:

  • компиляция программы выполняется один раз;
  • наличие компилятора на устройстве, для которого компилируется программа, не требуется.

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

  • компиляция — медленный процесс;
  • при внесении изменений в исходный код, требуется повторная компиляция.

Примерами таких языков могут служить: C , C ++, BASIC (создавался как компилируемый, но многие реализации являются интерпретируемыми) , Delphi , Pascal , и не так давно появившийся язык от Google – Go .

Логотип языка Go - компилируемого языка программирования, разработанного внутри компании Google.  Дата выхода языка: 10 ноября 2009 г.
Источник изображения: https://i.imgur.com/gxwWWAr.png
Логотип языка Go - компилируемого языка программирования, разработанного внутри компании Google. Дата выхода языка: 10 ноября 2009 г. Источник изображения: https://i.imgur.com/gxwWWAr.png

Интерпретация

Интерпретация – процесс чтения и выполнения исходного кода. Реализуется программой – интерпретатором.

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

Достоинства интерпретаторов по сравнению с компиляторами:

  • возможность работы в интерактивном режиме;
  • отсутствие необходимости перекомпиляции исходного кода после внесения изменений и при переносе кода на другую платформу.

Есть ряд возможностей, которые значительно легче реализовать в интерпретаторе, чем в компиляторе:

  • кроссплатформенность
  • динамическая типизация

Недостатки интерпретаторов по сравнению с компиляторами:

  • низкая производительность (машинный код исполняется процессором, а интерпретируемый код — интерпретатором; машинный код самого интерпретатора исполняется процессором);
  • необходимость наличия интерпретатора на устройстве, на котором планируется интерпретация программы;
  • обнаружение ошибок синтаксиса на этапе выполнения (актуально для чистых интерпретаторов).

Наиболее известными интерпретируемыми языками являются Java, JavaScript, Python и Ruby.

Логотипы Ruby и Python.
Источник: https://i.imgur.com/gxwWWAr.png
Логотипы Ruby и Python. Источник: https://i.imgur.com/gxwWWAr.png

Что же лучше?

Многие языки имеют как компилируемые, так и интерпретируемые реализации, сводя разницу между ними к минимуму. У каждого вида исполнения кода есть преимущества и недостатки.

Вкратце, компилируемые языки являются самыми эффективными, поскольку они исполняются как машинный код и позволяют использовать аппаратное обеспечение системы. Однако это вводит дополнительные ограничение на написание кода и делает его платформо-зависимым. Интерпретируемые же языки не зависят от платформы. Тем не менее, в скорости исполнения они значительно уступают компилируемым языкам.

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