Файл: «Классификация языков программирования высокого уровня» _.pdf

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

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

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

Добавлен: 17.06.2023

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

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

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

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

Рисунок 1 – Структура языков программирования высокого уровня [6, с.16]

Язык высокого уровня выполняет роль посредника между человеком и компьютером, позволяя человеку общаться с компьютером более привычным для человека способом. Часто такой язык помогает выбрать правильный метод решения задачи. Перед тем как писать программу на языке высокого уровня, программист должен составить алгоритм решения задачи, то есть пошаговый план действий, который нужно выполнить для решения этой задачи. Поэтому языки, требующие предварительного составления алгоритма, часто называют алгоритмическими языками [17].

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

Рисунок 2 – Схема работы транслятора [18]

При наличии трансляторов для разных архитектур теоретически становится возможным написать и отладить программу на одной ЭВМ, а затем перенести ее на другую и там использовать. Естественно, к минусам данной технологии можно отнести необходимость предварительной разработки транслятора [18].

Транслятор может относиться к одной из двух разновидностей: компиляторы и интерпретаторы. Разница между ними заключается в следующем. Компилятор принимает на вход всю программу на языке высокого уровня целиком и в результате процесса трансляции строит так называемый объектный модуль, содержащий машинный код, понятный процессору целевой ЭВМ. Интерпретатор переводит программу на языке высокого уровня построчно, при этом для каждой строки исходной программы создает некоторое внутреннее представление на специальном промежуточном языке, которое направляется специальной машине времени исполнения, или виртуальной машине (Virtual Machine). Эта машина немедленно исполняет полученное предписание [13, с.21].

И у компиляторов, и у интерпретаторов есть достоинства и недостатки. К достоинствам компилятора относится в первую очередь то, что полученный машинный код может непосредственно исполняться на данной ЭВМ, при этом наличия компилятора в момент выполнения не требуется. Выполнение же происходит на максимально возможной скорости. Однако в случае необходимости внесения в программу изменения, даже минимального, потребуется произвести перекомпиляцию исходного текста полностью, даже если он насчитывает десятки тысяч строк [18].


Интерпретатор переводит программу построчно, поэтому он удобен для отладки программы, когда постоянно происходят уточнения и изменения и нужно быстро увидеть, как поведет себя откорректированная программа. К недостаткам интерпретатора относится то, что, поскольку программа исполняется интерпретатором, а не непосредственно процессором, во-первых, скорость выполнения программы существенно ниже, чем при компиляции (обычно в 10–20 раз), а во-вторых, требуется наличие машины времени выполнения в памяти [13, с.21].

В то же время скомпилированная программа в машинном коде - аналогично программе на ассемблере - может исполняться лишь на архитектурно совместимой ЭВМ. А для интерпретируемого языка (например, Java) достаточно установки на данный компьютер машины времени исполнения (в случае Java - JVM (Java Virtual Machine)), после чего на ней теоретически могут быть исполнены любые программы на данном интерпретируемом языке.

Среди языков программирования высокого уровня Бейсик, Лисп, Java, Питон, Форт обычно реализуются как интерпретаторы, а Фортран, Си, С++, Паскаль, Модула-2 - как компиляторы, хотя это правило не является обязательным [13, с.22].

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

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

2. ВИДЫ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ

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


Рисунок 3 - Классификация языков программирования [9, с.16]

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

2.1. Процедурные языки программирования

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

<оператор1>

<оператор2>

<оператор3>

<операторn> [13, с.34].

В некоторых языках программирования операторы нумеруются.

Таким образом, императивные языки описывают процесс вычислений в виде команд, изменяющих состояние программы. Эти языки разрабатывались для фон-неймановской архитектуры ЭВМ, названной так в честь её автора – Джона фон Неймана. В компьютере фон Неймана данные и программы хранятся в одной и той же памяти, называемой оперативной. Центральный процессор получает из оперативной памяти очередную команду, декодирует её, выбирает из памяти указанные данные, выполняет команду и возвращает в память результат [10, с.8].

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

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

Процедурное программирование дает возможность повторного использования кода и в некотором смысле реализует принцип матрешки. Процедура - блок, который раскрывается в другом месте, а из данной программы лишь вызывается (указанием ее имени) [2, с.214].


Примером данного вида языков является язык Fortran (FORmula TRANslation) – язык программирования высокого уровня, разработанный фирмой IBM в 1956 году для описания алгоритмов решения вычислительных задач. Весьма любопытно, что Фортран жив и успешно используется до сих пор, например, в научных расчетах — конечно, развиваясь и вбирая новшества в программировании (были выпущены стандарты Фортран 77 и Фортран 90). Объясняется это, в частности, большим объемом наработанных эффективных библиотек программ, которые нет смысла переписывать на другие языки, но не только этим - например, в язык изначально встроена поддержка комплексных чисел, чего нет во многих современных языках. Последние версии Фортрана используются для программирования компьютеров с параллельной архитектурой [16].

Одним из наиболее известных, сильно повлиявших на дальнейшее развитие информационных технологий и широко используемых до сих пор языков программирования является Си (C) – язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х годов. На его основе были созданы такие наиболее популярные в настоящее время в индустрии программирования языки, как С++, С#, Java, PHP, Objective C и др. [16].

Кобол (COBOL, COmmon Business-Oriented Languauge) – язык программирования высокого уровня, разработанный в конце 1959-х гг. ассоциацией КАДАСИЛ для решения коммерческих и экономических задач. Отличается развитыми средствами работы с файлами. Поскольку команды программ, написанных на Коболе, используют обычную английскую лексику и синтаксис, язык считался одним из самых простых. В настоящее время практически не используется [19].

Алгол (ALGOL, ALGOrithmic Language) - язык программирования высокого уровня, ориентированный на описание алгоритмов вычислительных задач. Был создан в 1958 году специалистами западно-европейских стран для решения научных задач. Версия этого языка Алгол-60 была принята Международной конференцией в Париже и получила широкое распространение. Версия Алгол-68, разработанная группой специалистов Международной федерации по обработке информации в 1968 году, получила статус международного универсального языка программирования, ориентированного на решение не только вычислительных, но и информационных задач. Хотя этот язык не получил широкого распространения, он долгие годы являлся стандартом для описания алгоритмов в научной литературе [19].

Бейсик (BASIC, Beginner`s All-purpose Symbolic Instruction Code) – язык программирования высокого уровня, разработанный в 1963–1964 годах в Дартмутском колледже Томасом Куртом и Джоном Кемени. Первоначально предназначался для обучения программированию. Отличался простотой благодаря наличию упрощенных конструкций языка Фортран и встроенных математических функций. В большинстве версий Бейсика используется интерпретатор для преобразования конструкций языка в машинный код, что позволяет запускать программы без промежуточной трансляции.


Паскаль (PASCAL, Program Applique a la Selection et la Compilation Automatique de la Litterature) – французский язык программирования высокого уровня, разработанный в конце 1960-х годов швейцарским профессором, ставшим Нобелевским лауреатом, Никласом Виртом. Язык предназначался для первоначального обучения программированию в университете. Назван в честь французского математика XVII века Блеза Паскаля [19].

К этому виду языков относятся также такие распространённые языки программирования, как: PL/1, Ada, Java и др. Время появления отдельных императивных языков показано на рис.4.

Рисунок 4 – Императивные языки программирования [20]

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

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

2.2. Непроцедурные языки программирования

Принципиально иные направления в программировании относятся к непроцедурным парадигмам. К ним можно отнести объектно-ориентированное и декларативное программирование [11, с.128].

В 60-х г.г. ХХ в. возникает новый подход к программированию, который до сих пор успешно конкурирует с императивным, а именно, декларативный подход.

Декларативный подход к программированию означает, что с программиста снимается обязанность подробного инструктирования ЭВМ, как именно решать задачу (пошагового описания алгоритма), вместо чего ему необходимо лишь выполнить постановку задачи некоторым формальным образом, задав существующие ограничения, то есть описать, что требуется получить в качестве результата. Происходит переход от «Как?» к «Что?» [21].

Декларативный подход является попыткой воплощения идеальной технологии программирования, в качестве которой может быть рассмотрена такая технология, когда по некоторому довольно неформальному описанию задачи автоматически генерируется синтаксически и семантически корректная программа решения. Поиск решения при этом возлагается на встроенную в систему программирования «машину вывода». Ярким примером декларативного подхода являются и языки семейства SQL – языки запросов к базам данных, в которых описывается, что нам надо извлечь из базы, а система управления базой данных сама осуществляет все необходимые для этого действия [21].