Что такое компилируемые и интерпретируемые языки

Программирование

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

Что такое компилируемые и интерпретируемые языки
Что такое компилируемые и интерпретируемые языки?

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

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

Первый транслятор ПП-1 (Программирующая Программа) была разработана и использована в 1954 году. Уже в следующем году была создана ПП-2 с собственным загрузчиком, отладчиком, библиотекой стандартных процедур. В 1957 году был запущен компилятор для Fortran и после этого высокоуровневые языки стали активно использоваться программистами. Разработчиками последнего является группа специалистов из IBM во главе с Джоном Бэкусом.

Что такое компилируемые и интерпретируемые языки
Джон Бэкус – руководитель группы разработчиков IBM создателей компилятора для FORTRAN

В настоящее время в среде специалистов принята следующая классификация высокоуровневых языков по способу выполнения:

  • Компилируемые. К этой категории относятся языки C, C++, Object Pascal и другие, использующие для преобразования в машинные инструкции программы-компиляторы. На первом этапе исходный код переводится в объектные модули, на втором происходит их сборка в единый исполняемый файл при помощи линковщика.
  • Интерпретируемые. Данную категорию составляют языки типа Forth, Basic и им подобные. Исходный код считывается программой-интерпретатором и выполняется последовательно шаг за шагом.

Помимо перечисленных категорий высокоуровневых языков существуют и иные: компилируемые на базе псевдокода и совмещенные. Первые для обработки исходного кода используют специальные подпрограммы из библиотек. Вторые выполняются в два этапа: сначала происходит компиляция в байт-код языка Java или MSIL (при использовании протоколов технологии .NET), затем промежуточный код интерпретируется в машинный.

Компилируемые языки

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

Служебная программа-компилятор, образно говоря, обеспечивает перевод высокоуровневого языка на низкоуровневый и работает следующим образом:

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

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

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

  • Ada, Algol (его обновленные версии Algol 60 и 68, а также SMALL).
  • BASIC и PureBasic.
  • C и его вариации C++, Objective-C.
  • COBOL, Delphi и Fortran.
  • Pascal и Turbo Pascal.
  • Visual Basic в шести версиях.
  • ML и Standard ML.

Перечень языков, исходный код которых нужно компилировать в машинный, этим не ограничивается. Список можно дополнить менее популярными: Sather, Common Lisp, Swift, CLEO, LabVIEW, Ocaml, Haskell, Eiffel, Ubercode, Go, JOVIAL, Lush, Alice, Rust, Visual Foxpro и Visual Prolog.

Что такое компилируемые и интерпретируемые языки
Компиляция программы в байт-код

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

  1. Java (Scala, Kotlin, Groovy, Clojure, Jython).
  2. Технология .NET (C#, Visual Basic, F#, Cobra).
  3. Erlang.

Помимо традиционных программ-компиляторов используется еще один их тип – транспайлеры (transpiler). Они предназначены для перевода исходного кода, написанного на Emscripten , kPHP, Closure Compiler, coffeescript, Dart, Haxe, TypeScript или Coccinelle, на другие высокоуровневые языки программирования типа ActionScript , C++, Lua либо Python. Транспайлеры также используются для перевода старого исходного кода на более новые версии, а также в совместимые с программными интерфейсами API. При этом происходит нарушение принципа обратной совместимости.

Что такое компилируемые и интерпретируемые языки
Алгоритм работы программы-транспилятора

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

Интерпретируемые языки

В основу рассматриваемой классификации положен метод исполнения приложения процессором компьютера или мобильного устройства. Интерпретируемый язык программирования – это высокоуровневый язык с последовательной обработкой операторов и данных CPU. Специальная программа транслирует каждую логическую строчку исходного кода по отдельности.

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

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

Поначалу алгоритм работу интерпретаторов высокоуровневых языков программирования выглядел так:

  1. Отдельная логическая строка исходного кода преобразуется в машинный код.
  2. Каждый оператор и данные последовательно считываются процессором и сразу же исполняется.
  3. Если в программе присутствуют циклы, то процедуры выполняются заданное количество раз.
Что такое компилируемые и интерпретируемые языки
Алгоритм работы интерпретатора высокоуровневого языка на этапе отладки программы

Современные программы-интерпретаторы используют другие более совершенные алгоритмы работы:

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

Описанная схема применяется при работе наиболее распространенных языков программирования: Java, Python и Ruby. В последнем варианте исходный текст преобразуется в форму абстрактной синтаксической древовидной структуры. Такой подход позволяет оптимизировать процесс генерации кода на этапе промежуточного (внутреннего) представления между деревом разбора и формированием структуры данных.

Среди интерпретируемых высокоуровневых языков наибольшее распространение получили следующие:

  • APL (J), BASIC, Forth, Lisp, Python, Excel, Logo Perl, Visual Basic for Applications и PHP.
  • Скриптовые: JavaScript, Madness Script, VBScript, PostScript и F-Script.
  • Системы решения математических уравнений: Mathematica, GNU Octave, TK Solver, Interactive Data Language (IDL) и MATLAB.
  • Группа объектно-ориентированных языков: Smalltalk в версиях Dolphin и Little, а также VisualAge и VisualWorks.

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

Чем отличаются компилируемые и интерпретируемые языки программирования

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

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

Сложность рассматриваемого способа классификации заключается в том, что некоторые языки высокого уровня могут использовать и те, и другие алгоритмы. Для примера возьмем JavaScript – компилируемый или интерпретируемый это язык определить будет не так и сложно. Он относится к классу объектно-ориентированных с поддержкой мультипарадигменных сценариев. Для обеспечения работы программ, написанной на JavaScript, требуется интерпретация. Этим он отличается от похожего по названию языка Java, который относится к статическому типу и реализует иной подход, основанный на классах. Для его загрузки необходима предварительная компиляция байт-кода.

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

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

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

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

Что такое компилируемые и интерпретируемые языки
Преимущества и недостатки компилируемых и интерпретируемых языков

Языки высокого уровня, относящиеся к классу компилируемых, наряду с большой скоростью обработки имеют ряд иных преимуществ:

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

Языки компилируемого типа имеют и ряд недостатков:

  • Необходимость предварительного тестирования успешно скомпилированного приложения. Это требует дополнительных временных затрат и внимания со стороны программиста.
  • Исходный код, который скомпилированный для операционной системы Windows, не может быть запущен на Linux и наоборот. Для каждой ОС необходимо создавать отдельный исполняемый файл с использованием соответствующего служебного ПО.

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

Области применения

По подсчетам специалистов существует порядка 10 тысяч языков программирования высокого уровня. Часть из них устарели и практически не используются. Актуальных направлений в сфере разработки ПО на деле не так много. Рассматриваемые в обзоре высокоуровневые языки находят применение в следующих областях:

  • Компилируемые. Создание игр и программ для операционных систем Windows и Linux и разработка мобильных приложений.
  • Интерпретируемые. Веб-программирование, создание кроссплатформенных прикладных программ и математические вычисления.
Что такое компилируемые и интерпретируемые языки
Сферы применения языков программирования: классификация

Существуют и универсальные языки программирования такие как C, C++, C#, Java или Python, которые могут использоваться в любой из перечисленных сфер. Выбор языка для написания тех или иных программ в значительной мере определяется средой разработки.

Так какой же язык использовать?

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

  1. Для создания сложных одноразовых программ для математических вычислений и выполнения логических операций наилучшим образом подойдут интерпретируемые языки: Mathematica , MATLAB, JavaScript или PHP.
  2. Если требуется небольшая компактная программа с высокой скоростью обработки, лучше использовать компилируемые языки: Object Pascal, C или C++.
Что такое компилируемые и интерпретируемые языки
Выбор компилируемого или интерпретируемого языка программирования

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

Айтистанция
Добавить комментарий

Adblock
detector