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

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

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

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

Добавлен: 30.03.2023

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

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

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

Введение

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

Языки программирования бывают:

  • машинные
  • машинно-ориентированные
  • машинно-независимые

Машинный язык - система команд конкретной ЭВМ, набор инструкций двоичного кода.

Машинно-ориентированные языки - языки ассемблера (ассемблер - программа-транслятор), система команд с заменой двоичного кода на символы.

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

Машинный и машинно-ориентированный - языки низкого уровня и сложны для восприятия человека.

Машинно-независимые языки – языки высокого уровня. Они используют общепринятые термины и символы, и для перевода такого кода используются трансляторы языка.

Трансляторы языка - это программы для перевода языков высокого уровня в машинный код.

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

  • скриптовые (интерпретируемые)
  • компилируемые.

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

Компилируемые - это языки, которые переводятся, посредством программы или технического средства называемого компилятор, в машинный код; или в другой язык программирования посредством программы-транслятора.

Классификация языков программирования по поддерживаемым парадигмам программирования требует анализа их операционной семантики и реализационной прагматики.

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


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

  • процедурные
  • логические
  • объектно-ориентированные.

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

Логические языки - созданы на основе формул математической логики, и включают в себя раздел дискретной математики. Они базируются на классической логике и применимы для систем логического вывода.

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

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

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

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

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

  1. Семантика языков программирования


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

В 60-х годах Джоном Бэкусом (John Backus) были созданы основы формализации синтаксиса языков программирования посредством специального математического языка. Позднее Петером Науром (Peter Naur) этот язык (а с точки зрения целевого языка программирования — метаязык) был доработан, в результате чего возникла математическая нотация, известная и сегодня под названием "форм Бэкуса-Наура" или сокращенно - БНФ.[1]

Данная нотация была специально разработана с целью формализации синтаксиса языка программирования (в то время это был весьма популярный, прежде всего в математической среде, язык программирования ALGOL 60 с ясным, но довольно пространным синтаксисом). БНФ и сегодня являются теоретически адекватным и практически применимым средством формализации синтаксиса языков программирования.

Что касается теоретических основ семантики вычислений, то в конце 60-х годов Дана Стюарт Скотт (Dana Stewart Scott) предложил применить для формализации семантики математических теорий, так называемые домены[2] (пока будем неформально понимать их как особый вид множеств). При этом на основе доменов Д.С. Скоттом был предложен так называемый денотационный подход к семантике[3]. Такой подход предполагает анализ синтаксически корректных конструкций языка (или, иначе, денотатов) с точки зрения возможности вычисления их значений посредством специализированных функций.

Далее, в 70-х годах, М. Гордон (Michael J.C. Gordon) исследовал аппарат денотационной семантики применительно к языкам функционального программирования и сделал вывод об адекватности и практической эффективности использования этого подхода для решения поставленной задачи.

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

Одним из практических результатов исследований в этом направлении стала разработка П. Лендином (Peter J. Landin) семантики модели языка программирования в форме абстрактной машины[5] (т.е. модели компьютера), использовавшей понятие состояния.


Альтернативный подход к формализации семантики (который был осуществлен в рамках исследования так называемой операционной семантики языков программирования) привел к созданию Ч. Хоаром (Charles A.R. Hoare) аксиоматического метода, моделирующего отношения и причинно-следственные связи, возникающие между операторами языка программирования.

Развитие операционной семантики языков программирования привело Р. Флойда (Robert W. Floyd) к созданию так называемого метода индуктивных утверждений[6], который использовался для формализации семантики протекания информации в программе. При этом существенным преимуществом предложенного Р. Флойдом метода стала возможность интуитивно прозрачной и наглядной графической иллюстрации, основанной на блок-схемах, формализующих последовательность протекания информации.

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

Наиболее широко распространены разновидности следующих трёх: операционного[7], денотационного (математического) и деривационного[8] (аксиоматического).

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

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

Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.[9]

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


Итак, операционная семантика описывает смысл программы путем выполнения ее операторов на простой машине-автомате. Изменения, происходящие в состоянии машины при выполнении данного оператора, определяют смысл этого оператора.

С одной стороны, машина-автомат способна воспринимать задания, представляемые лишь на простом языке моделирования. С другой стороны, современный компьютер может служить универсальным интерпретатором такого языка. Подобный интерпретатор может быть реализован программой, которая становится виртуальной машиной для языка моделирования.[12]

Таким образом, в операционной семантике требуются:

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

□ виртуальная машина (ВМ) для языка моделирования. Или интерпритатор.[13]

Существует несколько подходов к определению семантики языков программирования.[14]

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

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

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

Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

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

  1. Основные парадигмы программирования

Парадигма программирования как исходная концептуальная схема постановки проблем и их решения является инструментом грамматического описания фактов, событий, явлений и процессов, возможно, не существующих одновременно, но интуитивно объединяемых в общее понятие. Парадигма имеет узкопрофессиональный смысл. Парадигмами программирования в форме языков и систем программирования представлено знание о потенциале информационных технологий.[16]Альтернативные подходы к обработке информации, сложившиеся при создании и применении языков и систем программирования принято называть парадигмами программирования.[17]