Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ. ( КЛАССИФИКАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ).pdf

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

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

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

Добавлен: 31.03.2023

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

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

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

Объясним почему именно так. Изучив историю создания языков можем проанализировать развитие нескольких из них. Алгол придумали в Европе, а Фортраном пользовались в основном в Штатах - больших отличий нет, всё равно это уже история. Сперва всё было сложно, и чтобы писать нужно было быть чуть ли не инженером, электротехником, понимать, где какие контакты замыкаются и ещё что-то для возможности программировать. Потом тоже нужно было сидеть с листочками и считать память, смотреть за ней. И постепенно всё становилось проще, проще, и дальше ещё проще для программиста - как можно меньше думать человеку, как можно больше делать автоматически. Примерно в конце вот периода «правления» Алгола и Кобола, начинают появляться языки, которые в каком-то смысле «дожили» до наших дней [7].

К примеру, BASIC. Можно предположить, что до сих пор некоторые люди на нём что-то пишут, во всяком случае, если обратиться в некоторые вузы, то увидим, что учат на QBASIC’е — такое синее окошко, где написано «1989». Данный язык придумывался как язык для непрограммистов. В то время программист была очень специализированная профессия. И говоря об этом языке, можно сказать смело, что тот Бейсик и современный Бейсик — это огромная разница. Пример: строки с нумерацией через 10, GOTO и прочее обозначения для написания программы на этом языке - они к современному Бейсику уже не имеют никакого отношения и даже к Бейсику 1989-го года практически не имеют отношения, этот язык эволюционировал, хоть и сохранил своё историческое название [11]. Возьмем ещё один пример – язык Паскаль, широко известный в вузовских кругах, в основном в России и в странах бывшего Советского Союза. Он использовался и продолжает использоваться на удивление как учебный язык [5]. Во всём остальном мире он поменьше распространён, но тоже существует в полном здравии, если так, можно сказать. Обратимся к истории, есть такой человек Вирт - он учёный, теоретик. Вирт участвовал в обсуждении Алгола, ему не понравилось то, что получилось, и он придумал свой язык - Pascal. А потом фирма Borland, а также до этого многие другие фирмы - Apple занималась, в частности, взяли и переделали буквально всё, если не сказать, что испортили. У него была красивая теория, стройная, а разработчики этих компаний взяли и заполнили, что людям «нужно» для работы. Разумеется, получилось не так красиво, как хотел Вирт.

Обратимся к языку С. «Си» придумали инженеры. Если Паскаль придумал учёный, то Си придумали Керниган и Ритчи, они работали инженерами в Bell. Во время «царствования» таких языков, как Fortran, COBOL, Algol, ничего системного написать было нельзя. Укажем, что такое «системное» - это, например, возьмем операционную систему, драйвера и т.д. Эти языки предназначались для математических расчётов, для бизнес-расчётов. А всё остальное писали на Ассемблере. Были какие-то языки, они сейчас умерли, то есть язык Си появился не сразу от Ассемблера, а через какие-то промежуточные вещи [5].


Несмотря на то, что язык С, строго говоря, является высокоуровневым языком, на фоне таких языков, как Java или C# его называют низкоуровневым, так как уровень абстракций неприлично низок. Более того, именно на нем в 95% случаев пишут около системные вещи, вроде драйверов и ядер ОС, используя, впрочем, тонны ассемблерных вставок. Поэтому однозначно отнести его к какой-то категории, невозможно. Иногда даже говорят, что C — «язык среднего уровня» [11], [13], [15].

Итак, рассмотрев объектно-ориентированные языки перейдем к декларативным языкам в рассматриваемой классификации.

К ним относятся функциональные и логические языки программирования (приложение, рис. 1). Функциональное программирование – это способ составления программ, в которых единственным действием является вызов функции. В функциональном программировании не используется память, как место для хранения данных, а, следовательно, не используются промежуточные переменные, операторы присваивания и циклы. Ключевым понятием в функциональных языках является выражение. Программа, написанная на функциональном языке, представляет собой последовательность описания функций и выражений. Выражение вычисляется сведением сложного к простому. Все выражения записываются в виде списков [10]. Первым языком стал язык Лисп (LISP, LIST Processing- обработка списков) создан в 1959 г. Этот язык позволяет обрабатывать большие объемы текстовой информации. Логическое программирование – это программирование в терминах логики. В 1973 году был создан язык искусственного интеллекта Пролог (PROLOG) (Programming in Logic). Программа на языке Пролог строится из последовательности фактов и правил, затем формулируется утверждение, которое Пролог пытается доказать с помощью правил. Язык сам ищет решение с помощью методов поиска и сопоставления, которые в нем заложены. Логические программы не отличаются высоким быстродействием, так как процесс их выполнения сводится к построению прямых и обратных цепочек рассуждений разнообразными методами поиска [8].

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


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

Лисп когда-то был автокодом в скобочной записи, но этим дело не ограничилось:

  • Scheme и Common Lisp
  • Haskell
  • РЕФАЛ
  • ML с диалектами и расширениями (F#, Caml, OCaml, и т. д.)
  • Erlang
  • Agda
  • Pure (term rewriting)

В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается ПРОЛОГ. Построение логической программы вообще не требует алгоритмического мышления, программа описывает статические отношения объектов, а динамика находится в механизме перебора и скрыта от программиста [4].

Изначально предназначались для создания экспертных систем aka искусственного интеллекта. Но на практике, при попытке создать что-нибудь действительно полезное, выявились недостатки, которые привели к появлению гибридных функционально-логических языков, таких как язык Prolog [2].

Рассмотрев декларативные языки, поведем итог. Функциональные и логические языки называют декларативными, или непроцедурными, поскольку программа представляет собой не набор команд, а описание действий, которые необходимо осуществить. Этот подход существенно проще и прозрачнее формализуется математическими средствами. Следовательно, программы проще проверять на наличие ошибок (тестировать), а также на соответствие заданной технической спецификации (верифицировать). Высокая степень абстракции также является преимуществом данного подхода. Фактически программист оперирует не набором инструкций, а абстрактными понятиями, которые могут быть достаточно обобщенными. Процесс вычисления можно описать как вычисление значений функций в математическом понимании. На практике, отличие математической функции от понятия «функция» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, таким образом, получая в разных местах.


Глубокая идея функциональных языков на самом деле гораздо глубже, чем кажется на первый взгляд. Джон Маккарти, автор Лиспа, перевернул всё программирование 50-х и 60-х годов с головы на ноги: он поставил на первое место не данные, вокруг которых суетятся мелкие программки, а сами эти программки. Данные же он предлагал протаскивать через цепочки выполнения, а язык для описания этого дела был назван «List Processor», то есть Язык Обработки Списков.

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

Плавно перейдем к следующей группе языков нашей классификации – прикладные языки программирования.

Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript [6].

Языком прикладного программирования считали Фортран, а не Алгол, на котором изначально предполагалось описывать вычислительные процессы. У него не было и до сих пор нет даже названия: «фортран» означает «транслятор формул», и так назывался не язык, а его компилятор. Изначально там не было даже правил видимости переменных, а все данные лежали в общей области данных: посчитал - и напечатал результат:

  • Фортран всех версий - классика
  • В нынешние времена благодаря Microsoft - Visual Basic (в том числе и VBA)
  • Javascript (в том числе и node.js)
  • Python, Perl, PHP, Ruby и Groovy

Иногда в прессе и на форумах поминают Фортран как что-то плохое. Возможно, так и было, но обижаться на то, что современные скриптовые языки происходят от него — глупость. Именно это направление развивалось больше всего (оно было прикладным) и именно на скриптах были обкатаны многие нововведения (такие, как словари), позже перенесённые в другие языки.

Теперь рассмотрим языки для написания проводок. Они же «бизнес-ориентированные языки». Первоначально эту нишу занимал простой, но не совсем понятный «Common Business-Oriented Language», который использовался в банках. Супермаркеты, рестораны, кафэтэрии, склады, турагентства, таксопарки, железные дороги, госструктуры – так до сих пор и используют его или один из его многочисленных диалектов:


  • Кобол и ABAP
  • PL/SQL
  • Caché Script

Кобол был отщепенцем среди других языков, и проклятие тяготело над ним с самого начала: данные хранились вместе с кодом и внутри кода, в блоках «var» в заголовках модулей - и там неизбежно накапливалась ненужная информация. Позже этот приём перешёл в языки Алгол и Паскаль, а всё это современное ООП – к сожалению, в нынешнее время, это нежизнеспособный гибрид Алгола с Коболом. Подробнее схема созданий и в заимствование языков находится в приложении, рис 2.

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

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

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко.

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

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

ГЛАВА 2. КРИТЕРИИ ВЫБОРА СРЕДЫ И ЯЗЫКА РАЗРАБОТКИ ПРОГРАММ