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

Margaret Perez
Основная цель языка программирования в Cisco заключается в обеспечении автоматизации и управления сетью. Он позволяет администраторам сети создавать и настраивать сетевые конфигурации, контролировать трафик, мониторить сетевые устройства и многое другое. Благодаря этому языку программирования, администраторы сети могут упростить и автоматизировать рутинные задачи, что значительно повышает эффективность и надежность сети.
Одной из особенностей языка программирования в Cisco является его способность взаимодействовать с различными протоколами и сервисами, такими как IP, Ethernet, OSPF, BGP и многими другими. Это позволяет администраторам сети создавать сложные сетевые конфигурации, включая маршрутизацию и коммутацию, а также настраивать безопасность и QoS (Quality of Service).
Язык программирования в Cisco имеет свою собственную синтаксическую структуру и набор команд, которые используются для создания и настройки сетевых конфигураций. Он также поддерживает использование переменных, циклов и условных операторов, что позволяет администраторам сети создавать более гибкие и масштабируемые сценарии настройки.
Кроме того, язык программирования в Cisco имеет мощные инструменты для отладки и мониторинга сетевых устройств. Он позволяет администраторам сети получать информацию о состоянии сетевых устройств, а также диагностировать и исправлять возможные проблемы в сети.
В общем, язык программирования в Cisco является ключевым инструментом для настройки и управления сетевыми устройствами Cisco. Он обеспечивает автоматизацию и упрощение задач администрирования сети, что позволяет повысить эффективность и надежность сети. Использование этого языка программирования позволяет администраторам сети создавать и настраивать сложные сетевые конфигурации, контролировать трафик и обеспечивать безопасность сети.
14. Классификация языков программирования
Язык программирования — искусственный (формальный) язык, предназначенный для записи программ для исполнителя. Язык программирования задается своим описанием. Описание языка программирования — это документ, специфицирующий возможности алгоритмического языка.
Классификация языков программирования
Языки программирования можно разделить на два класса: процедурные и непроцедурные. Процедурные (императивные) языки — это языки операторного типа. Описание алгоритма на этом языке имеет вид последовательности операторов. Характерным для процедурного языка является наличие оператора присваивания (Basic, Pascal, С).
Непроцедурные (декларативные) языки — это языки, при использовании которых в программе в явном виде указывается, какими свойствами должен обладать результат, но не говорится, каким способом он должен быть получен. Непроцедурные языки делятся на две группы: функциональные и логические.
Декларативные языки программирования — это языки программирования высокого уровня, в которых операторы представляют собой объявления или высказывания в символьной логике. Типичным примером таких языков являются языки логического программирования (языки, основанные на системе правил и фактов).
Логические языки
В программах на языках логического программирования соответствующие действия выполняются только при наличии необходимого разрешающего условия на вывод новых фактов из данных фактов согласно заданным логическим правилам. Логическое программирование основано на математической логике.
Первым языком логического программирования был язык Planner. В этом языке была заложена возможность автоматического вывода (получения) результата из данных и заданных правил путем перебора вариантов (совокупность которых называлась планом). Но самым известным языком логического программирования является ПРОЛОГ (Prolog).
Программа на языке ПРОЛОГ содержит две составные части: факты и правила. Факты представляют собой данные, с которыми оперирует программа, а совокупность фактов составляет базу данных ПРОЛОГа, которая, по сути, является реляционной базой данных. Основная операция, выполняемая над данными, — это операция сопоставления, называемая также операцией унификации или согласования. Правила состоят из заголовка и подцелей. Выполнение программы, написанной на ПРОЛОГе, начинается с запроса и состоит в доказательстве истинности некоторого логического утверждения в рамках заданной совокупности фактов и правил. Алгоритм этого доказательства (алгоритм логического вывода) и определяет принципы исполнения программы, написанной на ПРОЛОГе.
В отличие от программ, составленных на языках процедурного типа, предписывающих последовательность шагов, которые должен выполнять компьютер для решения задачи, на ПРОЛОГе программист описывает факты, правила, отношения между ними, а также запросы по проблеме.
На сегодняшний день существует целый класс логических языков; так, от языка Planner также произошли логические языки программирования QA-4, Popler, Conniver и QLISP. Языки программирования Mercury, Visual Prolog, Oz и Fril произошли уже от языка Prolog.
Функциональные языки
Первым языком функционального типа является язык ЛИСП. ЛИСП определяется как язык программирования функционального типа, в основу которого положен метод Х-исчисления.
Программа, написанная на функциональном языке, состоит из неупорядоченного набора уравнений, определяющих функции и значения, которые задаются как функции от других значений. Программы и данные ЛИСПа существуют в форме символьных выражений, которые хранятся в виде списковых структур. ЛИСП имеет дело с двумя видами объектов: атомами и списками. Атомы — это символы, используемые для идентификации объектов, которые могут быть числовыми и символьными (понятия, материалы, люди и т.д.). Список — это последовательность из нуля или более элементов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. Над списками выполняются три примитивные операции: извлечение первого элемента списка; получение оставшейся части списка после удаления первого элемента; объединение первого элемента списка L и оставшейся части списка Q.
Тексты программ на функциональных языках программирования только описывают способ решения задачи, но не предписывают последовательность действий для решения.
В качестве основных свойств функциональных языков программирования обычно рассматриваются следующие: краткость и простота; строгая типизация; модульность; функции — объекты вычисления; чистота (отсутствие побочных эффектов); отложенные (ленивые) вычисления.
Кроме ЛИСПа, к функциональным языкам относят РЕФАЛ (разработан в середине 60-х годов В.Ф. Турчиным в МГУ им. М.В. Ломоносова), Haskell, Clean, ML, OCaml, F#.
Объектно-ориентированные языки
Объектно-ориентированные языки — это языки, в которых понятия процедуры и данных, используемых в обычных системах программирования, заменены понятием «объект». Языком объектно-ориентированного программирования в чистом виде считается SmallTalk, возможности объектно-ориентированного программирования заложены также в Java, C++, Delphi.
Дальнейшее развитие современного программирования связано с так называемым «параллельным программированием». Для реализации этой технологии разрабатываются специализированные объектно-ориентированные языки. К языкам такого типа относят, например, МС# (mcsbarp) — высокоуровневый объектно-ориентированный язык программирования для платформы .NET, поддерживающий создание программ, работающих в распределенной среде с асинхронными вызовами.
Структура языка программирования
Между существующими языками программирования есть принципиальные расхождения в концепции построения языков, особенно это справедливо для более ранних языков, но все эти языки потому и называются языками программирования, что они с точки зрения внутренней системы построения имеют одинаковое формальное строение.
Любой язык программирования состоит из предложений (операторов). Предложения (как и слова) определены над неким алфавитом С. Синтаксис языка описывает множество предложений над алфавитом С, которые внешне представляют правильно сформированные программы.
Синтаксис языка — это правила получения слов и предложений этого языка. Синтаксис схематически описывается с помощью определенных грамматических правил.
Знание формального языка (алфавита + синтаксиса) хотя и достаточно для установления синтаксической корректности программы, однако недостаточно для понимания ее назначения и способа действий. Значение и способ действия программы на языке программирования уточняются путем задания семантики.
Семантика языка — это правила интерпретации слов формального языка, т.е. установления значения отдельных языковых элементов.
Для определения формальных языков, в том числе для языков программирования, используют БНФ (формы Бэкуса — Наура) и синтаксические диаграммы. Это два взаимозаменяемых способа описания.
При описании языка программирования через БНФ используются следующие обозначения:
- (..) — определяемое слово;
- R — правило из синтаксиса для формирования слова;
- (е) ::= R— БНФ-правило.
Каждое R состоит из терминальных слов или лексем языка и, возможно, следующих символов:
• [..] — данный элемент присутствует в БНФ;
- <..>— данное вхождение может быть использовано в БНФ;
* — данное вхождение может быть использовано в БНФ конечное число раз.
Cat, Mouse и Brainfuck: сколько языков программирования существует в мире
Мы задались вопросом, сколько языков программирования есть в мире и чем они отличаются друг от друга. Даем развернутый ответ.



Наталья Березовская
Автор в сфере IT, digital, экономики и финансов. Ведёт некоммерческий проект для начинающих писателей «ЛитЦех».
Язык программирования — это система семантических, лексических и синтаксических правил, придуманная человеком для написания программ, которые выполняет компьютер.
С начала существования первых вычислительных машин человечество придумало более 8 тысяч языков программирования. Почему так много? Они создавались в разных странах и разными компаниями для решения отличающихся задач. Некоторые разработчики пишут собственные формальные языки и интерпретаторы ради эксперимента или практики. Поэтому сколько языков программирования в мире, точно сказать невозможно: новые могут появляться в ту самую секунду, когда вы читаете этот текст.

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

Усложнение программ привело к тому, что люди уже не могли эффективно писать их на устаревшем языке ассемблера. В 1970-е годы разработчики создали первый высокоуровневый язык, многим известный Fortran, который используется и сейчас — в основном в научных разработках и вычислениях. В третьем и четвертом поколениях оформилось структурное программирование и появились функциональные языки: это, например, C, Pascal, Lisp, Scala, Erlang, F#, Haskell и другие.
Сегодня говорят уже о сверхвысокоуровневых языках, для которых характерен еще больший градус абстракции, чем в предыдущих. К этой группе относят Python, Ruby, Haskell, Perl.
Интерпретируемые и компилируемые
Это разделение основано на способе реализации — компиляция или интерпретация. Первый означает, что исходный код преобразуется в машинный через компилятор. Полученный результат (исполняемый модуль) уже может быть запущен как отдельная программа. Среди языков этой группы наиболее известны Ada, C, Java, Pascal, Basic, Visual Basic, Cobol, Swift, Go, Haskell, C#, Kotlin, .NET, Python и Erlang.

Интерпретация — это выполнение кода непосредственно и построчно, то есть команда за командой. В этом случае программа не может быть запущена без интерпретатора. К языкам такого типа относятся PHP, JavaScript, Python, Lava, MATLAB, Perl и другие.

Преимущество и главное отличие интерпретатора от компилятора в том, что разработчик может изменить код программы на сервере, и это сразу будет применено при запросе к нему. Программисту компилируемого языка нужно после внесения изменений перекомпилировать код и отправить полученный файл на сервер.
Со статической и динамической типизацией
Еще один вариант классификации — по мощности и строгости типов того или иного языка. Динамическая типизация означает, что переменная получает свой тип не при ее объявлении, а в момент присвоения ей значения. Динамически типизированные языки — это PHP, JavaScript, Ruby, Python, Objective-C, Lisp, Perl, Erlang, Visual Basic, Smalltalk.
Статическая типизация — противоположный прием: переменная получает свой тип при ее объявлении, и он не может быть изменен позже. Примеры статически типизированных языков: Java, Pascal, C++, C#, Ada.
Эзотерические языки
Их еще называют игрушечными — это языки, которые разработали «for fun», но вместе с тем они исследуют возможности программирования, пародируя существующие «серьезные» технологии и становясь их абсурдной реализацией.
Некоторые из них созданы на основе литературного синтаксиса, например, шекспировских пьес, кулинарных рецептов, японских стихотворений хайку. И даже на основе вымышленной инопланетной логики клингонов из сериала «Star Trek» — язык Var’Aq.
Один из широко известных эзотерических языков — Brainfuck («вынос мозга»), созданный в 1993 году Урбаном Мюллером. В нем всего восемь команд, и каждая записывается одним символом. Несмотря на свой минимализм, Brainfuck обладает тьюринг-полнотой — то есть на нем определенно можно реализовать любую вычислимую функцию. Следуя его концепции, многие разработчики написали свой игрушечный язык наподобие Brainfuck.

Специальные языки
Их создавали для решения каких-то очень узких специфических задач. Например, язык Mouse был разработан для управления цифровыми и аналоговыми устройствами в электронной музыкальной студии. Его элементы состоят из единичных символов, и в нем всего 26 переменных, ограниченных буквами латинского алфавита от A до Z. Вот пример небольшой программы на нем:

Еще одна известная пара — Visual Basic for Applications (VBA) и Microsoft Excel. А в случаях, когда оба они являются визуальными, встраиваемые языки называют плагинами или фильтрами. Так, можно очень условно сказать, что для визуального метаязыка Adobe Photoshop существует множество встраиваемых мини-языков — плагинов.
Актуальные языки
Несмотря на огромное их количество, в разработке сегодня используется не так много. Языки программирования со временем устаревают, так как технологии развиваются и становятся все более совершенными и быстрыми. Это нормальный процесс, который наметился еще в шестидесятых-семидесятых годах прошлого столетия.
Существует множество рейтингов и площадок в интернете, составляющих топы актуальных языков. Например, индекс TIOBE анализирует количество поисковых запросов и выдает динамику популярности того или иного языка по месяцам:

После 20-й позиции можно видеть менее востребованные технологии или те, которые используют в очень узких сферах:

Однако рейтинги и топы в интернете могут иметь статистические погрешности. Индексы TIOBE и PYPL ориентируются только на поисковые запросы: первый — на их количество, а второй — на то, как часто люди гуглят тот или иной язык. На самом деле узнать, сколько разработчиков в мире используют Python, R или Ruby, непросто — для этого придется провести очень масштабное и сложное исследование. Если вы знаете, как это сделать, напишите в комментариях.
Мы предложили бы ориентироваться на ежегодный отчет GitHub, где указывается 15 наиболее популярных на этой платформе языков. Пусть выборка включает в себя только проекты с открытым исходным кодом и не охватывает 100% профессиональной области, она все же более близка к истине. По этим данным рейтинг за 2017 год:


Здесь тоже лидируют JavaScript и относящиеся к frontend языки разметки HTML и CSS.
Какой язык выбрать для освоения?
Мы частично рассмотрели, какие языки программирования существуют сегодня. Какой же выбрать из всего этого многообразия? Жизнь диктует свои простые условия: технология всегда выбирается под решение конкретной задачи. Мир IT огромен, и потому в нем столько языков. Новичок может выбрать актуальный в той сфере, которая ему близка и интересна.
Например, для анализа данных применяются Python и R, «короли» веб-разработки — PHP и JavaScript, работа в банковских системах и госструктурах не обойдется без Java, ААА-игры создаются на C++ и C# и так далее.
Наиболее перспективные сферы разработки программного обеспечения:
- искусственный интеллект;
- «интернет вещей» и встраиваемые системы;
- Data Science;
- мобильные приложения;
- блокчейн.
Выбирайте то, что вам близко, и ориентируйтесь на актуальные данные по востребованности, профессиональные рейтинги и тенденции.
Заключение
Неважно, сколько языков знает программист, — главное, чтобы он владел ими на профессиональном уровне, а также понимал основы разработки, умел пользоваться современными инструментами и фреймворками. Сегодня также востребованы fullstack-специалисты, которые разбираются сразу во всем.
Читайте также:
- Чем Rust отличается от «плюсов»: откровение ветерана С++
- Нетоксичный чат для джунов: прокачать скиллы, найти ментора и первую работу
- Все любят язык Go: почему он стал популярным и сколько зарабатывают разработчики
На какие группы можно разделить множество языков программирования
В статье рассматривается проблема эффективного обучения программированию в вузе, так как фундаментальность подготовки в области программирования во многом определяется классификацией языков программирования. На данный момент существует большое разнообразие, как языков программирования, так и их классификаций. В работе предложена следующая классификация языков программирования: императивные и функциональные. Императивные языки программирования включают четыре группы: первая — ассемблер, интерпретаторы Бейсик, Фортран; вторая – Паскаль; третья – Си; четвертая – специализированные языки программирования. Возможным критерием классификации функциональных языков может являться – использование функций: узкого класса (Пролог) и разных классов (Хаскел). Построенная классификация используется авторами в рамках преподавания таких дисциплин, как: «Программирование», «Языки и методы программирования», «Искусственный интеллект», «Теория алгоритмов».

объектно-ориентированные языки программирования
аппликативные
функциональные
императивные
классификация языков программирования
язык программирования
программирование
1. Душкин Р. В. Функциональное программирование на языке Haskell. Текст лекций по курсу «функциональное программирование» М. 2001
2. Иванова Л.В., Чекушина В.Е. Методы и формы обучения программированию в вузе. //Сборник научных трудов SWorld. -Выпуск 3. Том 17. -Одесса: КУПРИЕНКО СВ., 2013. -ЦИТ:313-0324. -С. 18-22.
3. Иванова Л.В. Методические аспекты обучения программированию будущих учителей информатики. Материалы XII Международной научно-методической конференции «Информатика: проблемы, методология, технологии», Воронеж, 9-12 февраля 2012, том 2, 92-94
4. Иванова Л.В. Методические аспекты преподавания дисциплины «Информатика и программирование». //Сборник научных трудов SWorld. -Выпуск 1. Том 13. -Одесса: КУПРИЕНКО СВ, 2014 — ЦИТ: 114 — 509. С. 41-43
5. Лаптев В.В., Швецкий М.В. Методическая система фундаментальной подготовки в области информатики: теория и практика многоуровневого педагогического университетского образования. — Спб.: Издательство Санкт-Петербургского университета, 2000. – 508 с.
6. Лапчик М.П. и др. Методика преподавания информатики: Учеб. пособие для студ. пед. вузов/ М.П.Лапчик, И.Г.Семакин, Е.К. Хеннер; Под общей ред. М. П. Лапчика. — М.: Издательский центр «Академия», 2001. — 624 с.
7. Пильщиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. –М.: Наука. Гл. ред. физ.-мат. лит., 1989.-160 с.
8. Пратт Т., Зелкович М. Языки программирования: разработка и реализация / Под общей ред. А. Матросова. – СПб.: Питер, 2002. – 688 с.: ил.
Программирование — раздел информатики, занимающийся разработкой средств решения задач на компьютере и созданием программного обеспечения, с помощью которого реализуется вычислительный процесс и обмен информацией с внешним миром. Из всего многообразия языков программирования активно применяется только часть их, другие же стали историей языков программирования. В конструкциях различных языков программирования много общего, они классифицируются по своим возможностям, конструктивным особенностям и сферам применения. Программирование из искусства постепенно превращается в промышленное изготовление программ, для чего создаются разнообразные технологии программирования.
Наш многолетний опыт преподавания программирования в школе и в вузе показал, что начинать изучение языков программирования целесообразнее с их классификации, так как это во многом определяет содержание обучения [4]. В результате анализа существующих классификаций мы четко выделяем две группы языков программирования.
Программа — это алгоритм, исполнителем которого может быть компьютер. Во многих учебниках по программированию или алгоритмизации не обращается достаточного внимания на следующую двойственность алгоритма:
- Алгоритм может быть исполнен.
- Алгоритм может быть записан.
В языке Бейсик четко выделены команды list — просмотреть запись текста программы и run — исполнить эту программу Язык программирования — возможность реализации записи алгоритма для компьютера.
В настоящее время количество языков программирования огромно. Имеется потребность их классификации. Попыток классифицировать их принималось много, например, в книге Т. Пратта и М.Зелковича [8] языки программирования разделены на четыре группы:
- императивные;
- аппликативные;
- основанные на системах правил;
- объектно-ориентированные.
Приведены описания этих групп языков, но четких признаков, по которым тот или иной язык программирования относится к определенной группе не выделено.
Приведенный в качестве примера языка, основанного на системах правил, Пролог вполне может рассматриваться как функциональный язык, в котором используются функции, возвращающие логическое значение. С другой стороны, совершенно не определено словосочетание «система правил». В любом языке программирования есть некоторая система правил, например, правил оформления записей.
Считаем также несостоятельным выделение в отдельную группу объектно-ориентированные языки. Мы также выделяем эти языки, но как подгруппу алгоритмических языков, поскольку имеется достаточно много общего с другими языками основной группы. Представляется, что все объектно-ориентированные языки программирования, есть набор библиотек самостоятельных программ, неважно, на каком языке написанных изначально, но они исполняются операционной системой. Фактически, объектно-ориентированный язык предоставляет возможность программисту использовать в своих проектах уже готовые объекты операционной системы. Просто правила конструирования новых проектов имеют в основе правила записи языков прародителей.
Вывод о том, что объектно-ориентированный язык программирования просто представляет собой возможность подключения к своим проектам ресурсов операционной системы, подтверждается тем, что во многих учебниках по таким языкам раздел о создании собственных объектов представлен очень слабо, а в некоторых учебниках вообще отсутствует. С другой стороны, уделяется большое внимание подключению и вопросам совместимости библиотек программ.
Предлагается разделить все языки программирования четко на две группы: императивные и функциональные.
Классификация языков программирования
Императивные
Функциональные
Синонимы
Память
Система «склада». Изначально «склад» заполняется исходными данными, получаемыми непосредственно (с помощью специальной операции присваивания) или извне (с устройств ввода). Далее, данные берутся из одного «помещения» склада, обрабатываются (изменяются) и размещаются в другом. Результат — появление требуемых данных в указанном «помещении» склада (заполнение видеопамяти обеспечивает вывод ответа на мониторе ПК).
Отсутствие «склада». Для получения данных один «специалист» требует их непосредственно от другого «специалиста», тот от следующего.
Переменная
Фиксированное помещение выше упомянутого «склада». Всегда глобальны, но придуманы способы «скрытия» отдельных «помещений», например системы «видимости» имен переменных, позволяющие иметь локальные переменные.
Информация, передаваемая от одного процесса обработки другому. Существует лишь для момента процесса передачи. Всегда локальны.
Теоретичес-кая база
Принципы фон-Неймана, машина Тьюринга.
Исчисление Черча, вычислимые функции.
Режим работы
Компиляционный. Высокое быстродействие.
Интерпретационный. Режимы реального времени.
Описание действий (процедурность).
Описание возможностей (декларативность).
Передаваемые (через «склад» или нет) данные обладают определенными свойствами (типы данных). По этому параметру императивные и функциональные не различаются.
Дальнейшую классификацию проводим для каждой группы отдельно.
Императивные языки программирования классифицируем по работе с переменными и подпрограммами, тенденция — приближение по возможностям к функциональным языкам.
Классификация императивных языков программирования
Переменные
Подпрограммы
Проблемы
Явно глобальные. Только базовые типы данных.
Необходимость следить за тем, чтобы в одну переменную не попадали разные данные, переприсваивание перед вызовом подпрограмм и после их исполнения.
Фиксирование некоторых имен переменных, работающих одинаково, например, до сих пор счетчики в циклах обозначаются i, j.
Появление областей видимости
Разделяются на процедуры и функции
Возможность применения рекурсии.
Появление сложных (структурированных) данных, которые пока невозможно возвращать как значения функций.
Унификация подпрограмм — только функции.
Активное применение указателей.
Возвращение структурированных объектов подпрограммами, как адресов этих объектов.
Появление проблемы «очистки мусора».
Объединение в единое целое данных и средств их обработки (объекты).
Объектно-ориентированные языки программирования
Использование программными системами уже имеющихся средств — объектов операционной системы.
В языки программирования первой подгруппы получение информации обеспечивается, в основном, присваиванием. Появляется режим пакетной обработки информации. По сути, получение пакета — обобщение операции присваивания.
Для работы этих языков программирования операционная система не нужна. Средства языка достаточны для замены операционной системы. Много персональных компьютеров («Ямаха», «БК») выпускались с встроенным языком программирования, таким, как Бейсик или Фокал.
К языкам этой группы можно отнести ассемблер, интерпретаторы Basic, Фортран. Язык ассемблера можно и отделить, как имеющий слабую типизацию данных, «машинно-зависимый» язык. Фортран тоже занимает особую позицию, но с другой стороны: имеет достаточно серьезную типизацию данных.
Глобальность переменных приводит к необходимости большого количества переприсваиваний. Перед каждым входом в подпрограмму (GWbasic, Qbasic) выполняется заполнение переменных подпрограммы значениями из переменных основной программы и обратная передача информации после завершения подпрограмм. Недопустимость одноименности переменных в программах и подпрограммах является причиной ошибок в больших программах и затрудняет использование чужих подпрограмм. Во избежание этих трудностей, в языки программирования второй группы, каждой подпрограмме предоставляется своя область определения, в том числе и имен. Появляется иерархия. При необходимости значения переменных берутся из области имен самой подпрограммы, если переменная в подпрограмме не объявлена, ищем в области определения подпрограммы, вызвавшей данную подпрограмму. Оказывается возможным применение рекурсии. В задачнике Пильщикова В.Н.[7] знаком повешенной трудности отмечено задание на вычисление значения Sin(Sin(. Sin(x))). Для языка Паскаль, поддерживающего рекурсию, данное задание трудностей не представляет. По-видимому, автор перерабатывал задания для языка Фортран, где, из-за недопустимости рекурсивных вызовов, при выполнении задания возникают проблемы.
Компиляционный режим работы требует наличия в памяти кода всех подпрограмм программы, но оперативная память компьютеров не безгранична. Появляется возможность создания оверлейных программ, когда часть оперативной памяти предоставляется для хранения отдельных модулей кода программы, заменяемых по необходимости.
Примерами языков программирования второй подгруппы являются: QBasic, Паскаль.
Во всех рассмотренных языках сохраняется четкое разделение элементов программы на команды и выражения. И при выполнении программ, и при вычислении выражений часто приходится выполнять одинаковые действия, что организуется в виде подпрограмм. Подпрограммы — элементы программ получили название «процедуры», фактически, после объявления — отдельные команды программы. Подпрограммы — элементы выражений, называют функциями. С развитием теории алгоритмов, появляется отождествление понятий «алгоритм» и «функция». Как только мы представим исполнение программы вычислением некоторого результата (результатом, кроме данных, может быть и действие), а исходные данные сопоставим с аргументами, разница между процедурами и функциями стирается.
Представителем языка программирования третьей подгруппы можем считать язык Си.
Представителем языков программирования четвертой подгруппы можем считать языки dBASE, FoxPro.
Работа с объектами появляется в очередных версиях языка Паскаль, Си и других.
Языки группы объектно-ориентированных, как уже отмечалось выше, по сути одно и то же. Традиционными остались формы записи основных алгоритмических структур и объявление переменных, как у предшественников, но других различий почти нет. Basic → VisualBasic, Pascal → Delphi, C → C++→C#. Существенную часть программ на этих языках составляют объекты системных библиотек, одних и тех же.
Попытаемся классифицировать функциональные языки. Возможен критерий — по используемым функциям.
Классификация функциональных языков программирования
Функции
Примеры
В языке программирования «Пролог» имеем функции, возвращающие результат только логического типа.
Язык программирования «Хаскел» работает с различными функциями.
В математике известно заявление Пратта Т., что любое высказывание математики может быть записано предложениями «Если . то . ». Существует так же раздел «математическая логика», включающий «исчисление предикатов». Двоичная система, выдающая результат «да» или «нет», лежит в основе практически всех наук, от арифметики, до юриспруденции. Как видим, существуют широко используемые, замкнутые системы логических функций. Компьютерной реализацией оболочки подобной системы можем считать язык Пролог.
Если в алгоритмических языках мы описываем необходимые для получения результата действия, с указанием порядка их выполнения (детерминированность), то в пролог-системе мы просто перечисляем действия, которые можно выполнить (декларативность). Появляется новая категория — цель. Цель представляет собой так же некоторое действие. Основным вопросом программирования на языке Пролог является: возможно ли достичь поставленной цели, не выходя за рамки имеющихся правил? Сам путь достижения цели, важный пользователю, для пролог-системы вторичен.
Реализация поиска результата сопоставима с поиском пути в графе. В алгоритмических языках, для работы с иерархическими графами известен алгоритм перебора с возвратом. Используя этот алгоритм, можно составить список действий, выполнив который получаем результат. Базой функциональных языков является конструкция «список», основанная на понятии «монада». Список — есть набор из двух элементов: первый элемент — «голова», и «хвост» — снова такой же список остальных элементов. Для завершенности конструкции добавляем возможность «пустого» списка.
Первым из языков, предназначенным для работы со списками, считается Лисп. Лисп занимает двоякую позицию: с одной стороны, он может быть отнесен к алгоритмическим языкам, с другой, наличие аппарата работы со списками, позволяет решать задачи функциональных языков.
Языки Лисп и Пролог используются для создания систем искусственного интеллекта, представляющих собой наборы правил «Если . то . », задачей которых является диагностика имеющейся ситуации и выполнение соответствующих действий для достижения цели.
Как в математике «математическая логика» не охватывает всех имеющихся возможностей, так и языков логического программирования недостаточно для решения различных задач. Появляются реализованные на функциональной основе возможности обработки не только логических данных.
В настоящее время существует несколько функциональных языков программирования, например, Душкин Р. В. [1] выделяет:
- Lisp (List processor). Считается первым функциональным языком программирования. Нетипизирован. Содержит массу императивных свойств, однако, в общем поощряет именно функциональный стиль программирования. Существует объектно-ориентированный диалект языка — CLOS.
- Scheme. Диалект Lisp’а, предназначенный для научных исследований в области computer science. При разработке Scheme был сделан упор на элегантность и простоту языка.
- ML (Meta Language). Семейство строгих языков с развитой полиморфной системой типов и параметризуемыми модулями.
- Miranda. Разработан в качестве стандартного функционального языка, использовавшего отложенные вычисления. Имеет строгую полиморфную систему типов. Оказал большое влияние на разработчиков языка Haskell.
- Haskell. Один из самых распространённых нестрогих языков. Имеет очень развитую систему типизации. Несколько хуже разработана система модулей. Последний стандарт языка — Haskell-98.
- Gofer (GOod For Equational Reasoning). Упрощённый диалект Haskell’а. Предназначен для обучения функциональному программированию.
- Clean. Специально предназначен для параллельного и распределённого программирования. По синтаксису напоминает Haskell. Clean использует отложенные вычисления.
С некоторой натяжкой, к функциональным языкам программирования, можно отнести системы редактирования (работа в интерпретационном режиме со специализированными данными — тексты, изображения). Как примеры, назовем HTML, Flash.
Представление о классификации языков программирования необходимы, например, при переводе алгоритмов с одного языка на другой.
Заключение
Фундаментальная подготовка будущих учителей информатики в нашем вузе на физико-математическом факультете осуществляется с 1987 года [5], с 2011 года — бакалавров по направлениям подготовки: 230700.62 Прикладная информатика и профилю подготовки «Прикладная информатика в экономике», 010200.62 Математика и компьютерные науки (профиль — «Математическое и компьютерное моделирование»).
Предложенный в данной работе подход к классификации языков программирования на две группы: императивные и функциональные апробирован в рамках таких дисциплин, как: «Программирование», «Языки и методы программирования», «Практикум решения задач на ЭВМ», «Информатика и программирование», «Теория и методика обучения информатике», «Искусственный интеллект», «Теория алгоритмов» [6]. Важность выбора языка программирования в фундаментальной подготовке специалистов в области информатики и программирования, методические аспекты эффективного обучения программированию рассматривались авторами в таких статьях, как [2-4].
Рецензенты:
Ахметов Л.Г., д.п.н., профессор кафедры теории и методики профессионального образования, ЕИ К(П)ФУ, г. Елабуга.
Мухаметшин А.Г., д.п.н., профессор кафедры педагогики и психологии, декан факультета педагогики и психологии, НИСПТР, г. Набережные Челны.