Файл: КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ (Основные понятия).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 198

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

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

Конкретный язык программирования в подавляющем большинстве случаев имеет более одного праязыка. Многие языки создаются путем соединения элементов различных языков. В одних случаях такое сочетание проходит математический анализ на предмет непротиворечивости (напримерStandart ML)[1] , в других — язык формируется, исходя из необходимостей в данный момент времени, для решения актуальных проблем с целью получения коммерческого успеха, но при этом без соблюдения математической строгости и с включением в язык взаимоисключающих идей (как в случае С++[2]).

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

Основные понятия

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

Язык программирования - это язык, предназначенный для записи компьютерных программ[3]. Язык программирования строго определён правилами записи, которые в свою очередь определяют внешний вид и действия программы, которые произведёт исполнитель (компьютер) под её управлением.

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

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


Как правило, язык программирования определяется не только через спецификации стандарта языка, но и через реализации стандарта — программные средства, обеспечивающие трансляцию или интерпретацию программ на этом языке. Такие программные средства различаются по производителю, марке и версии, времени выпуска, полноте воплощения стандарта, дополнительным возможностям; могут иметь определённые ошибки или особенности воплощения, влияющие на практику использования языка или даже на его стандарт.

История

Условно можно сказать, что первые языки программирования появились ещё до изобретения электронных вычислительных машин. Например музыкальная шкатулка программировалась на основе металлического цилиндра и Жаккардовый ткацкий станок посредством картонных карт. Важным «языком программирования» можно назвать тот, на котором Августа Ада Кинг в 1842 написала программу для вычисления чисел Бернулли для аналитической машины Чарльза Бэббиджа.

Программисты ЭВМ начала 1950-х годов, в особенности таких, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным кодом[4], посредством единиц и нулей и который принято считать языком программирования первого поколения (при этом разные машины разных производителей использовали различные коды, что требовало переписывать программу при переходе на другую ЭВМ).

Довольно быстро на смену такому методу программирования пришло применение языков второго поколения, также являющихся машинно-ориентированными, но более простых для использования человеком за счёт использования мнемоник[5] и возможности сопоставления имён адресам в машинной памяти (язык ассемблера). Однако, при использовании ассемблера становился необходимым процесс перевода программы на язык машинных кодов перед её выполнением, для чего были разработаны специальные программы, также получившие название ассемблеров.

С середины 1950-х начали появляться языки третьего поколения, такие как Фортран, Лисп и Кобол[6]. Такие языки назвали «языками высокого уровня», они универсальны, не имеют жёсткой привязки к конкретной машине. Программа на языке высокого уровня может исполняться на любой ЭВМ, на которой для этого языка имеется транслятор (инструмент, переводящий программу на язык машины, после чего она может быть выполнена процессором).


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

Объединение и развитие языков программирования.

В 1980-е годы наступил период объединения и укрепления ранее созданных языков программирования. Язык C++ объединил в себе черты объектно-ориентированного и системного программирования, правительство США стандартизировало язык Ада, производный основанный на базе Паскаля и предназначенный для использования в бортовых системах управления военными объектами. Сообщество функциональных языков приняло в качестве стандарта ML и Лисп. В целом этот период характеризовался скорее опорой на заложенный в предыдущем десятилетии фундамент, нежели разработкой новых моделей программирования.

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

В 1990-х годах в связи с активным развитием Интернета[7] распространение получили языки, позволяющие создавать сценарии для web-страниц главным образом Perl и Java. Возрастала также и популярность технологий виртуализации. Однако эти изменения также не представляли собой фундаментальных новаций, являясь скорее совершенствованием уже существовавших парадигм и языков (в последнем случае — главным образом семейства Си).

В настоящее время развитие языков программирования идёт в направлении повышения безопасности и надёжности, создания новых форм модульной организации кода и интеграции с базами данных[8].

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

Классификация языков программирования


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

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

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

Процедурные языки разделяют на языки низкого и высокого уровня.

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

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

Языком низкого уровня (машинно-ориентированным) является Ассемблер[9], который просто представляет каждую команду машинного кода, но не в виде чисел, а с помощью условных символьных обозначений, называемых 
мнемониками.

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

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

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


Работа всех трансляторов строится по одному из двух принципов: интерпретация или компиляция.

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

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

Несмотря на указанные недостатки, трансляторы-интерпретаторы получили достаточное распространение, так как они удобны при разработке и отладке исходных программ.

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

Большая сложность в разработке компилятора по сравнению с интерпретатором с того же самого языка объясняется тем, что компиляция программы включает два действия: анализ, то есть определение правильности записи исходной программы в соответствии с правилами построения языковых конструкций входного языка, и синтез – генерирование эквивалентной программы в машинных кодах. Трансляция методом компиляции требует неоднократного «просмотра» транслируемой программы - трансляторы-компиляторы являются многопроходными: при первом проходе они проверяют корректность синтаксиса языковых конструкций отдельных операторов независимо друг от друга, при последующем проходе – корректность синтаксических взаимосвязей между операторами и так далее.

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