Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
61
Добавлен:
27.05.2015
Размер:
2.11 Mб
Скачать

Тема 1. Функциональная парадигма в программировании

1.1. Общие сведения о парадигмах программирования

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

  • 1957г., процедурная парадигма, язык ФОРТРАН, создатель Бэкус;

  • 1967г., функциональная парадигма, язык ЛИСП, создатель Маккарти;

  • 1970г., структурированная парадигма, язык ПАСКАЛЬ, создатель Вирт;

  • 1974г., логическая парадигма, язык ПРОЛОГ;

  • 1983г., объектно-ориентированная парадигма, пример - язык C++, создатель Страуструп.

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

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

  1. Процедурная (или модульная) парадигма;

  2. Логическая парадигма;

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

Эти три совершенно разные по подходу парадигмы составляют основу современного программирования. Хотя в настоящее время наиболее "модной" является объектно-ориентированная парадигма, остальные парадигмы также используются на практике и изучаются в ВУЗах.

Прежде чем начать описание собственно функционального прог­раммирования, необхо­димо обратиться к истории науки о прог­раммировании.

1.2. История функционального программирования

Широко известно, что теоретические основы императивного прог­раммирования были заложены еще в 30-х годах XX века учё­ными Аланом Тьюрингом и Джоном фон Нейманом. Теория, по­­ло­жен­ная в ос­но­ву функционального подхода, также родилась в 20-х – 30-х годах XXстолетия. В числе раз­ра­ботчиков ма­те­ма­тических основ функционального программирования можно наз­вать Мо­зеса Шён­финкеля (Германия и Россия) и Хаскелла Кар­ри (Англия), разработавших ком­бинаторную логику, а также Алон­зо Чёрча (США), создателя-исчисления.

Теория так и оставалась теорией, пока в начале 50-х годах XXве­ка Джон МакКарти не раз­работал язык Lisp [1], [10], [12], ко­то­рый стал первым почти функциональным языком прог­рам­ми­ро­ва­ния и на протяжении многих лет оставался единственным. Хо­тя Lisp все еще ис­пользуется (как, например, и FORTRAN), он уже не удовлетворяет некоторым сов­ре­мен­ным запросам, ко­то­рые заставляют разработчиков программ взваливать как мож­но боль­шую ношу на компилятор, облегчив тем самым свой не­по­сильный труд. Не­об­хо­ди­мость в этом, конечно же, возникла из-за всё более возрастающей сложности программного обес­пе­че­ния.

В связи с этим всё большую роль начинает играть типизация. В конце 70-х – начале 80-х годов XX века интенсивно раз­ра­ба­ты­ваются модели типизации, под­хо­дящие для функциональных язы­ков. Большинство этих моделей включали в себя под­дер­жку та­ких мощных механизмов, как абстракция данных и по­ли­мор­физм. Появляется мно­жест­во типизированных функциональных язы­ков: ML, Scheme, Hope, Miranda, Clean и мно­гие другие. Вдо­ба­вок постоянно увеличивается число их диалектов, при­ме­ня­е­мых для решения конкретных задач.

В результате вышло так, что практически каждая группа ис­сле­дователей, занимающаяся функциональ­ным прог­рам­ми­ро­ва­ни­ем, использовала собственный язык [13], [14]. Это пре­пят­с­т­во­вало дальней­шему распространению этих языков и порождало мно­гочисленные более мелкие пробле­мы. Чтобы исправить си­ту­ацию, объединенная группа ведущих исследователей в об­лас­ти функционального программирования решила воссоздать дос­то­инства различных языков в новом универсальном фун­к­ци­о­наль­ном языке. Первая реализация этого языка, названного Haskell в честь Хаскелла Карри, была создана в начале 90-х го­дов. В настоящее время дей­ствителен стандарт Haskell-98 [2].

В первую очередь, большинство функциональных языков прог­раммирования реализу­ются как интерпретаторы, следуя тра­дициям языка Lisp. Интерпретаторы удобны для быстрой от­лад­ки программ, исключая длительную фазу компиляции, тем са­мым укорачивая обыч­ный цикл разработки. Однако с другой сто­роны, интерпретаторы в сравнении с компиля­торами обычно про­игрывают по скорости выполнения в несколько раз. Поэтому по­мимо интерпретаторов существуют и компиляторы, ге­не­ри­ру­ю­щие неплохой машинный код (например, Objective Caml) или код на C/C++ (например, Glasgow Haskell Compiler). Прак­ти­чес­ки каждый компилятор с функционального языка реализован на этом же языке.

В данном методическом пособии будет рассмотрена ре­а­ли­за­ция стандарта Haskell-98 в виде интерпретатораHUGS 98.

Соседние файлы в папке То что скидывала Даша