Характеристика особенностей функционального программирования
А. Тьюринг и Дж. фон Нейман - создатели теоретических основ императивного программирования. Быстрая отладка программного кода, исключающая длительную фазу компиляции - преимущество интерпретаторов. Основы работы с инструментальным средством HUGS 98.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 12.12.2014 |
Размер файла | 49,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Введение
Созданная в 1998 году спецификация языка Haskell (названного так в честь учёного Хаскелла Карри, одного из основоположников функционального программирования) нашла необычайно широкую поддержку в научных кругах, в первую очередь, Европы и Японии. В связи с этим буквально за несколько месяцев различными исследовательскими группами и коммерческими компаниями было создано несколько реализаций языка Haskell как в виде интерпретаторов, так и в виде компиляторов -- бесплатных и коммерческих.
Наиболее интересным инструментальным средством (ИС), которое используется во многих университетах мира при изучении основ функционального программирования, является ИС HUGS 98, включающее в себя собственно интерпретатор языка Haskell стандарта 1998 года (далее Haskell-98), а также интегрированную среду программирования.
Кроме того, ИС HUGS 98 является абсолютно бесплатным программным средством и может быть свободно получено через Интернет по адресу www.haskell.org. Это дополнительно способствует распространению рассматриваемого ИС в качестве средства для обучения, хотя оно и обладает некоторыми недостатками по сравнению с коммерческими реализациями языка Haskell_98.
1. Общие сведения о функциональном программировании
1.1 История функционального программирования
Широко известно, что теоретические основы императивного программирования были заложены еще в 30-х годах XX века учёными Аланом Тьюрингом и Джоном фон Нейманом. Теория, положенная в основу функционального подхода, также родилась в 20-х - 30-х годах XX столетия. В числе разработчиков математических основ функционального программирования можно назвать Мозеса Шёнфинкеля (Германия и Россия) и Хаскелла Карри (Англия), разработавших комбинаторную логику, а также Алонзо Чёрча (США), создателя -исчисления.
Теория так и оставалась теорией, пока в начале 50-х годах XX века Джон МакКарти не разработал язык Lisp, который стал первым почти функциональным языком программирования и на протяжении многих лет оставался единственным. Хотя Lisp все еще используется (как, например, и FORTRAN), он уже не удовлетворяет некоторым современным запросам, которые заставляют разработчиков программ взваливать как можно большую ношу на компилятор, облегчив тем самым свой непосильный труд. Необходимость в этом, конечно же, возникла из-за всё более возрастающей сложности программного обеспечения.
В связи с этим всё большую роль начинает играть типизация. В конце 70-х - начале 80-х годов XX века интенсивно разрабатываются модели типизации, подходящие для функциональных языков. Большинство этих моделей включали в себя поддержку таких мощных механизмов, как абстракция данных и полиморфизм. Появляется множество типизированных функциональных языков: ML, Scheme, Hope, Miranda, Clean и многие другие. Вдобавок постоянно увеличивается число их диалектов, применяемых для решения конкретных задач.
В результате вышло так, что практически каждая группа исследователей, занимающаяся функциональным программированием, использовала собственный язык. Это препятствовало дальнейшему распространению этих языков и порождало многочисленные более мелкие проблемы. Чтобы исправить ситуацию, объединенная группа ведущих исследователей в области функционального программирования решила воссоздать достоинства различных языков в новом универсальном функциональном языке. Первая реализация этого языка, названного Haskell в честь Хаскелла Карри, была создана в начале 90-х годов. В настоящее время действителен стандарт Haskell-98.
В первую очередь, большинство функциональных языков программирования реализуются как интерпретаторы, следуя традициям языка Lisp. Интерпретаторы удобны для быстрой отладки программ, исключая длительную фазу компиляции, тем самым, укорачивая обычный цикл разработки. Однако с другой стороны, интерпретаторы в сравнении с компиляторами обычно проигрывают по скорости выполнения в несколько раз. Поэтому помимо интерпретаторов существуют и компиляторы, генерирующие неплохой машинный код (например, Objective Caml) или код на C/C++ (например, Glasgow Haskell Compiler). Практически каждый компилятор с функционального языка реализован на этом же языке.
В данном реферате будет рассмотрена реализация стандарта Haskell-98 в виде интерпретатора HUGS 98.
1.2 Основы функционального программирования
Каждая парадигма программирования отличается теми или иными свойствами, особо выделяемыми исследователями в качестве дифференцирующих свойств, отделяющих одну парадигму от другой. В качестве основных свойств функциональных языков традиционно рассматриваются следующие:
· краткость и простота;
· строгая типизация;
· модульность;
· функции -- это значения;
· чистота (отсутствие побочных эффектов);
· отложенные (ленивые) вычисления.
2. Основы работы с HUGS 98
После запуска ИС HUGS 98 на экране появляется диалоговое окно среды разработчика, автоматически загружается специальный файл предопределений типов и определений стандартных функций на языке Haskell (Prelude.hs) и выводится стандартное приглашение к работе.
Диалоговое окно среды разработчика состоит из главного меню, набора кнопок для быстрого доступа к наиболее часто используемым командам и консоли, где происходит работа с интерпретатором. Необходимо особо отметить, что ИС не позволяет создавать и редактировать файлы с кодами программ, для этого требуется использование любого текстового редактора, поддерживающего обычный стандарт TXT (этим редактором, например, может быть стандартный блокнот Windows).
Рис. 1. Главное окно ИС HUGS 98
императивный программный компиляция интерпретатор
Главное окно HUGS 98 (рис. 1) обеспечивает доступ ко всем командам ИС, используемым для интерпретации и отладки программ. Кроме того, ИС позволяет вызвать на редактирование открытые модули в стандартном окне Notepad, встроенном в операционную систему Windows любой версии.
2.1 Панель инструментов HUGS 98
На панели инструментов, находящейся слева на главном диалоговом окне, предоставлены кнопки, при помощи которых можно вызвать наиболее часто используемые в процессе разработки команды (конечно, с точки зрения разработчиков ИС HUGS 98, а не с точки зрения конечного пользователя). Ниже представлены краткие описания всех четырнадцати кнопок, которые можно найти на панели инструментов.
2.2 Команды консоли HUGS 98
Консоль ИС HUGS 98 предоставляет небольшой набор служебных конструкций, позволяющих управлять работой ИС. Многие из этих команд дублируют действия кнопок на панели инструментов и некоторые пункты главного меню приложения. Однако в любом случае эти команды могут позволить профессиональным пользователям значительно ускорить процесс разработки.
Каждая команда начинается с символа «двоеточие» -- «:». Это сделано для того, чтобы отличить встроенные команды от написанных разработчиками функций. Кроме того, ИС позволяет сокращать каждую команду вплоть до одной буквы, набрав только символ «двоеточие» и собственно первую букву команды.
Всего существует девятнадцать команд, ниже представлено подробное описание каждой из них.
:load [<filenames>]
Загружает программные модули из заданных файлов (имена файлов можно разделить пробелом). Дублирует кнопку загрузки модулей на панели инструментов. Если имена файлов отсутствуют, то происходит выгрузка всех модулей, кроме стандартного (Prelude.hs). При повторном использовании команды все ранее загруженные модули выгружаются из памяти интерпретатора.
:also <filenames>
Подгружает дополнительные модули в текущий проект. Имена файлов должны быть разделены пробелами (если указывается более чем один файл).
:reload
Повторяет последнюю выполненную команду загрузки (:load). Позволяет быстро выполнить перезагрузку модуля в случае, если он редактируется во внешнем текстовом редакторе.
:project <filename>
Загружает и использует файл проекта. Загрузить можно только один файл. Файлы проекта используются для объединения разрозненных файлов с кодом. При повторном использовании команды происходит выгрузка всех файлов (как проектных, так и обычных) из памяти интерпретатора.
:edit [<filename>]
Вызывает внешний текстовый редактор для исправления указанного файла. Если имя файла не указано, то на редактирование вызывается последний файл (загруженный или редактированный). Данная команда дублирует кнопку вызова внешнего текстового редактора на панели инструментов.
:module <module>
Устанавливает заданный модуль в качестве текущего для выполнения функций. Эта команда предназначена, в первую, очередь для разрешения коллизий имён.
<expr>
Запуск заданного выражения на выполнение. Например, команда main запустит на выполнение соответствующую функцию -- main, что произведёт дублирование кнопки с панели инструментов.
:type <expr>
Выводит на экран тип заданного выражения. Эта команда используется, главным образом, в отладочных целях для быстрого получения типа создаваемого выражения (переменной, функции, сложного объекта).
:set [<options>]
Позволяет задать параметры ИС с командной строки. Дублирует действие диалогового окна настройки HUGS 98 (описание которого приведено в приложении В). Все возможные параметры этой команды (<options>) выводятся на экран при выполнении этой команды без каких-либо параметров.
:names [pat]
Выводит на экран список всех имён объектов, которые находятся в текущем (если не задано иное) пространстве имён.
:info <names>
Выводит на экран описание заданных имён объектов. Например, для функций выводит их тип вместе с именем заданной функции.
:browse <modules>
Выводит на экран список всех объектов (функций, переменных, типов), определённых в заданных модулях. Имена модулей должны быть разделены пробелом (в случае, если указано более одного имени модуля).
:find <name>
Вызывает на редактирование модуль, содержащий заданное имя. Если заданного имени нет ни в одном из текущих модулей, то выдаётся собщение об ошибке: ERROR -- No current definition for name "<name>".
:!<command>
Выходит в операционную систему и выполняет заданную команду. Необходимо особо отметить, что между символом «восклицательный знак» и именем команды операционной системы должен отсутствовать пробел.
:cd <directory>
Изменяет текущий каталог, с которым работает HUGS 98.
:gc
Принудительно запускает на выполнение процесс сборки мусора. После этого выводит на экран статистику о собранных и восстановленных ячейках памяти.
:version
Выводит на экран информацию о версии установленного интерпретатора языка Haskell и ИС HUGS 98.
:quit
Осуществляет выход в операционную систему. Дублирует кнопку на панели инструментов.
2.3 Дополнительные возможности для отладки
ИС HUGS 98 предоставляет разработчику несколько дополнительных возможностей для отладки программ, которые во многих случаях облегчают разработку и позволяют более обширно «оглядеть» созданное приложение. К таким дополнительным возможностям относятся просмотр классов, просмотр зарегистрированных имён объектов, просмотр конструкторов типов и просмотр иерархии классов.
Далее подробно рассматривается каждая из этих дополнительных возможностей, однако перед этим необходимо разъяснить значения обозначений, применяемых во всех инструментах по просмотру. Итак, к таким обозначениям относятся разноцветные пиктограммы прямоугольного формата с определённой буквой внутри. Всего таких пиктограмм девять:
· Синий прямоугольник с буквой C -- обозначение класса (от английского class).
· Красный прямоугольник с буквой I -- обозначение экземпляра класса (от английского instance).
· Розовый прямоугольник с буквой M -- обозначение функции-члена класса (от английского member).
· Синий прямоугольник с буквой N -- обозначение имени функции (от английского name).
· Красный прямоугольник с буквой P -- обозначение примитива (от английского primitive). Примитив отличается от обычной функции тем, что его определения нет в файле, а встроено в интерпретатор. Примитивы присутствуют только в файле Prelude.hs.
· Зелёный прямоугольник с буквой C -- обозначение конструктора типа (от английского constructor).
· Синий прямоугольник с буквой D -- обозначение типа данных (от английского data).
· Красный прямоугольник с буквой S -- обозначение встроенного типа.
· Розовый прямоугольник с буквой N -- обозначение описания нового типа (от английского new type).
Список литературы
1. Хювёнен Э., Сеппенен И. Мир Lisp'а. В 2-х томах. М.: Мир, 1990.
2. Bird R. Introduction to Functional Programming using Haskell. 2-nd edition, Prentice Hall Press, 1998.
3. Филд А., Харрисон П. Функциональное программирование. М.: Мир, 1993.
4. Хендерсон П. Функциональное программирование. Применение и реализация. М.: Мир, 1983.
5. Fokker J. Functional programming. Dept. of CS. Utrecht University, 1995.
6. Thompson S. Haskell: The Craft of Functional Programming. 2-nd edition, Addison-Wesley, 1999.
7. Norvig P. Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp. Los Altos, CA: Morgan Kaufmann, 1992.
8. Russel S.J., Norvig P. Artificial Intelligence: A Modern Approach. Englewood Cliffs, NJ: Prentice-Hall, 1995.
Размещено на Allbest.ru
Подобные документы
А.М. Тьюринг как английский математик, логик, криптограф, оказавший существенное влияние на развитие информатики. Понятие и назначение машины Тьюринга, принцип ее работы и сферы практического применения. Этапы реализации парадигмы программирования.
реферат [8,1 K], добавлен 04.10.2011Изучение возможностей среды программирования delphi при разработке приложения с визуальным интерфейсом. Отладка программных модулей с использованием специализированных средств. Способы работы с динамическими массивами. Оптимизация программного кода.
курсовая работа [1,0 M], добавлен 23.12.2016Особенности разработки кода программного модуля на современных языках программирования. Отладка и тестирование программы, оформление документации на программные средства. Применение инструментальных средств для автоматизации оформления документации.
отчет по практике [203,8 K], добавлен 12.04.2015Описание языков программирования высокого уровня. Стандартные структуры данных, обзор принципов структурного программирования. Построение математической модели и выбор структуры данных для решения задачи. Тестирование и отладка программного кода.
курсовая работа [1,3 M], добавлен 05.12.2020Характеристика объектно-ориентированного, процедурного, функционального программирования. Выбор языка программирования для создания программного обеспечения для управления справочником "Спортсмены". Алгоритм работы приложения, пользовательский интерфейс.
курсовая работа [1,6 M], добавлен 23.02.2016Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Отладка программных модулей с использованием специализированных программных средств. Тестирование программного обеспечения. Оптимизация программного кода.
курсовая работа [974,0 K], добавлен 21.12.2016Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.
курсовая работа [501,4 K], добавлен 07.12.2016Структура и назначение программного кода программы по созданию 3D-графики средствами языка программирования Visual Basic. Элементы управления "Окно формы" и "Таймер", выполняемые ими функции и основные свойства, значение в работе программного кода.
лабораторная работа [362,4 K], добавлен 06.07.2009Реализация линейных списков в языке программирования C++. Основные операции при работе с ними. Разработка интерфейса и алгоритмов. Описание работы программы на псевдокоде. Составление программного кода. Тестирование, отладка и результат работы программы.
курсовая работа [1,1 M], добавлен 07.01.2014Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.
курсовая работа [1,2 M], добавлен 04.08.2014