Понятие «язык программирования»

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

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

Язык программирования — это формальная знаковая система, предназначенная для записи программ (строится в соответствии с той или иной базовой моделью вычислений, т.е. совокупностью стратегий, методов, подходов и понятий, определяющих стиль программирования). Программа обычно представляет собой некоторый алгоритм записанный в форме, понятной для исполнителя (компьютера). Язык программирования определяет набор лексических, синтаксических и семантических правил, используемых при составлении компьютерной программы. Он позволяет программисту точно определить на какие события будет реагировать компьютер, как будут храниться и передаваться данные, а также какие именно действия следует выполнять над этими данными при различных обстоятельствах (условиях). Лексика (словарный запас) является центральной частью языка, именующей, формирующей и передающей знания об объектах реальной действительности. Синтаксис – сторона языка программирования, которая описывает структуру программ как наборов символов. Семантика в программировании – это система правил, определяющих поведение отдельных языковых конструкций (определяет смысловое значение предложений алгоритмического языка).

Создатели языков по-разному толкуют понятие «язык программирования». К наиболее распространенным утверждениям, признаваемым большинством разработчиков, относятся следующие. Язык программирования предназначен для написания компьютерных программ, применяемых для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствам. Язык программирования – это способ передачи команд, приказов, четкого руководства к действию. Язык программирования использует специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений. В отличие от естественных языков, язык программирования имеет ограниченный запас слов (операторов) и строгие правила их написания, а правила синтаксиса и семантики, как и для любого формального языка, однозначно и четко сформулированы.

Языки программирования, ориентированные на команды процессора и учитывающие его особенности, называют языками низкого уровня. Терминология «низкий уровень» означает близость операторов языка к машинному коду. Наиболее используемый и популярный язык низкого уровня — ассемблер. Каждый оператор этого языка представляет в виде мнемокодов команду микропроцессора (что позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка – обычно английских). Для каждого типа микропроцессора создаётся свой ассемблер, поддерживающий все его команды. При помощи языков низкого уровня создаются компактные и быстродействующие программы, так как программист получает доступ ко всем возможностям процессора (однако, при этом необходимо хорошо понимать устройство компьютера, а написанная программа не может быть использована на компьютере с процессором другого типа). Такие языки программирования применяются для написания небольших системных приложений, драйверов устройств, модулей стыков с нестандартным оборудованием, когда важны компактность, быстродействие, прямой доступ к аппаратным ресурсам.

Языки программирования, которые имитируют естественные и обладают укрупненными командами, удобными для использования программистом, называют языками высокого уровня. Основная черта таких языков — это абстракция (введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, которые воспроизвести на низкоуровневом языке программирования весьма затруднительно). Особенности конкретных компьютерных архитектур в них не учитываются, поэтому исходные тексты программ легко переносимы на другие платформы, имеющие трансляторы этого языка. Короче говоря, высокоуровневые языки стремятся не только облегчить решение сложных задач программирования (программы на языках высокого уровня с помощью понятных и мощных команд писать значительно проще, а число ошибок, допускаемых в процессе программирования, намного меньше), но и упростить портирование (переносимость) программного обеспечения. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами и оборудованием. Однако, «оторванность» высокоуровневых языков от аппаратной реализации компьютера помимо плюсов имеет и минусы. В частности, она не позволяет создавать простые и точные инструкции к использованию оборудования. Следствием этого становится нормой добавление поддержки современных профессиональных высокоуровневых языков программирования языком низкого уровня (языком ассемблера).

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

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

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

Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка (например, Pascal) можно написать интерпретатор, а для любого интерпретируемого языка можно создать компилятор (например, Lisp – изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений). В реальных системах программирования (например, Java) смешаны технологии компиляции и интерпретации. В процессе отладки такие программы можно выполнять по шагам (трассировать), а результирующий код не обязательно будет машинным. Он может быть, например, аппаратно-независимым промежуточным кодом абстрактного процессора, который в дальнейшем будет транслироваться в различных компьютерных архитектурах с помощью интерпретатора или компилятора в соответствующий машинный код. Этот подход позволяет использовать плюсы как интерпретаторов, так и компиляторов.

Итак, процесс создания программы в общем виде включает:

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

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

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

Что такое \


Похожие статьи.

Понравилась статья? Поделиться с друзьями: