Языки программирования: назначение, виды. Компиляция, интерпретация, трансляция

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

Первые программы появились едва ли позже создания компьютера. Первым программистом принято считать знаменитую Аду Лавлейс, дочь лорда Байрона, которая так была сильно увлечена математикой и трудами Чарльза Бэббиджа. Чарльз Бэббидж вошел в историю благодаря конструированию «Аналитической машины», которая, исходя из ее проектирования, должна была быть очень похожа по своей структуре на современный компьютер. Она должна была иметь устройство для ввода и вывода данных, «накопитель», в которых должны были размещаться промежуточные результаты, «мельницу» для вычислений, управляющее устройство. Юная Ада буквально подхватила идею создания этой машины и помимо новых идей по конструированию узлов и механизмов, она занималась разработкой программ к еще не существующей машине. Надо отметить, что после себя эти два замечательных человека оставили только гору чертежей и схем. Сама же машина была построена много позже, в XX века группой студентов в дань уважения «отцу компьютерной техники».

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

15 0049 2376

Здесь первое число означает код операции, а два других — номера ячеек памяти, откуда нужно взять значения. Например, если «15» - код операции сложения, то запись означает, что нужно было взять число, лежащее в ячейке с номером 0049 и сложить с числом, лежащем в ячейке с номером 2376 и положить результат в ячейку с номером 0049. Понятно, что в этих числах легко можно было запутаться. Разобраться в таких записях иногда просто невозможно. Нужно помнить все коды операций, кроме того, нужно помнить все адреса ячеек, где лежат данные. Кроме того, все эти команды записывались в двоичной системе счисления. Конечно же, ни о каком удобстве программирования говорить в этом случае не приходится. Зато процессору такие команды не просто понятны, но и являются единственно возможными. Процессору команды понятны, а человеку совершенно нет. Чтобы как-то приблизить программирование к человеку, были созданы специальные языки с транслятором[1] типа Ассемблер (англ. assembler — сборщик). Такие языки назывались языками Ассемблера. Эти языки имели общую структуру, которая состояла из метки, кода и комментария. Код состоял из так называемой мнемоники и списка аргументов. Мнемоника — трех-, четырехбуквенное сокращение команды, аналог кода операции. Список аргументов записывался через запятую, их количество зависело от конкретной операции. В этом случае команды могли выглядеть так:

MOV a, 15

MOV b, 35

Эти команды означают, что переменной «а» нужно присвоить значение 15, а переменной «b» - значение 35. Аналогом команды из вышеобозначенного примера могла бы быть команда

ADD a, b

что означало бы, «сложить число, лежащее в ячейке «а» с числом в ячейке «b», а результат положить в ячейку «а».

Как видно из примера, язык очень сильно напоминает машинный, но здесь имеются некоторые «человеческие» элементы: например, команда «MOV» созвучна с английским словом «move», что означает «передвинуть», а команда «ADD» созвучна со словом «add» (прибавить). Во-вторых, здесь уже нет адресов ячеек, а есть переменные. Дать переменной конкретный адрес ячейки уже не задача программиста, а задача программы-транслятора. Таким образом, программист избавлен от проблемы поиска свободных ячеек памяти, за него это делает машина. Отметим, что в этом случае язык уже не совсем машинный, и для компьютера эти команды незнакомы, ему их нужно переводить (транслировать). Но все же этот язык очень похож на машинный. Такие языки называют языками программирования низкого уровня.

Однако даже на языках ассемблера работать достаточно сложно и трудоемко. Естественно желание писать программы так таком языке, который был бы более приближен к «человеческому», где команды звучали бы как фразы. Такие языки называются языками программирования высокого уровня. Например, такой фрагмент программы, написанный на языке Pascal

If n<15 then n:=n+3 else n:=n-2,

в переводе с английского звучит так: «если n < 15, то n:=n+ 3, иначе n:=n- 2». На языке программирования Pascal эта фраза означает «если n < 15, то к n прибавать 3, иначе от n отнять 2». Почти как на английском. Очевидно, что с помощью этого языка можно писать программы легче, такие программы легко понимаемы. Кроме того, языки программирования высокого уровня позволяют работать с любыми данными, а не только с числами. Еще стоит отметить, что если языки Ассемблера были предназначены для процессора определенного типа (поэтому неверно говорить «язык Ассемблер», так как ассемблер — это только программа-транслятор), то языки программирования высокого уровня не зависят от типа компьютера.

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

 
 


императивные декларативные
Программа представляет собой алгоритм решения какой-то задачи. Алгоритм описывается пошагово. Например, «для того, чтобы перейти дорогу, нужно:
  1. Подойти к проезжей части;
  2. Посмотреть на светофор;
  3. Если светофор зеленый,
    1. посмотреть по сторонам и
      1. если нет автомобилей, пересекающих проезжую часть, то перейти проезжую часть
      2. иначе подождать, пока машины проедут;
    2. перейти проезжую часть.
  4. иначе подождать одну секунду вернуться к пункту 2;
  5. перейти проезжую часть.»
Примерами могут служить такие языки, как
  • Pascal
  • BASIC
  • Delphi
  • C++, C#
·
В них по сути нет алгоритма, есть только описание данных в их взаимосвязи. На основании полученных данных компьютер должен сформулировать ответ. Например: «на проезжей части 3 автомобиля: красный, синий и зеленый; светофор стоит в пяти метрах, на нем горит красный свет; 2 автомобиля движутся, один стоит. Можно ли мне перейти через проезжую часть?» Примерами декларативных языков программирования служат:
  • Prolog
  • Lisp
  • SQL

Транслятор

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

1) интерпретатор;

2) компилятор.

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: