Программирование на функциональном уровне - Function-level programming
Эта статья возможно содержит оригинальные исследования.Апрель 2018 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В информатике функциональный уровень программирование относится к одному из двух противоположных парадигмы программирования идентифицировано Джон Бэкус в своей работе над программами как математическими объектами, другой программирование на уровне ценностей.
В его 1977 г. Премия Тьюринга На лекции Бэкус изложил то, что он считал необходимостью перехода к другой философии в дизайне языков программирования:[1]
Проблемы с языками программирования. Каждый последующий язык включает, с небольшой очисткой, все функции своих предшественников, а также некоторые другие. [...] Каждый новый язык требует новых и модных функций ... но очевидным фактом является то, что немногие языки делают программирование достаточно дешевым или более надежным, чтобы оправдать затраты на их создание и обучение их использованию.
Он разработал FP быть первым язык программирования специально для поддержки стиля программирования на уровне функций.
А функциональный уровень программа без переменных (ср. без точек программирование ), поскольку программные переменные, которые важны для определений на уровне значений, не нужны в программах на функциональном уровне.
Вступление
В стиле программирования на уровне функций программа строится непосредственно из программ, которые даны вначале, путем их объединения с программообразующие операции или же функционалы. Таким образом, в отличие от подхода на уровне ценностей, который применяет данные программы к ценностям для формирования преемственность ценностей достигая высшей точки в желаемом значении результата, подход на уровне функций применяет операции формирования программы к данным программам, чтобы сформировать последовательность программ завершение программы желаемого результата.
В результате, функциональный подход к программированию предполагает изучение пространство программ под программообразующие операции, стремясь вывести полезные алгебраические свойства этих операций по формированию программ. Функционально-уровневый подход предлагает возможность сделать набор программ математическое пространство подчеркивая алгебраические свойства программно-образующих операций над пространство программ.
Еще одно потенциальное преимущество представления на уровне функций - это возможность использовать только строгие функции и таким образом иметь восходящая семантика, которые являются простейшими из всех. Еще одно - существование определений на уровне функций, которые не являются поднял (то есть, поднял от более низкого уровня значений к более высокому функциональному уровню) любого существующего уровня значений: эти (часто краткие) определения уровня функций представляют более мощный стиль программирования, недоступный на уровне значений.
В отличие от функционального программирования
Когда Бэкус изучил и опубликовал свой стиль программирования на функциональном уровне, его сообщение в основном было неправильно понято.[2] как поддержку традиционных функциональное программирование стилевые языки вместо своего собственного FP и его преемник FL.
Бэкус называет функциональное программирование прикладное программирование[требуется разъяснение ]; его программирование на уровне функций - особый, ограниченный тип.
Ключевым отличием от функциональных языков является то, что язык Бэкуса имеет следующую иерархию типов:
- атомы
- функции, которые переводят атомы в атомы
- Функции высшего порядка (которые он называет «функциональными формами»), которые превращают одну или две функции в функции
... и единственный способ генерировать новые функции - использовать одну из фиксированных функциональных форм: вы не можете построить свою собственную функциональную форму (по крайней мере, не в FP; вы можете в FFP (Формальная FP )).
Это ограничение означает, что функции в FP являются модуль (генерируемые встроенными функциями) над алгеброй функциональных форм и, таким образом, алгебраически поддаются обработке. Например, общий вопрос о равенстве двух функций эквивалентен проблема остановки, и неразрешимо, но равенство двух функций в FP - это просто равенство в алгебре, и поэтому (как считает Бэкус) проще.
Даже сегодня многие пользователи лямбда-стиль языки часто неверно интерпретируют функциональный подход Бэкуса как ограничительный вариант лямбда-стиля, который де-факто ценностный стиль. Фактически, Бэкус не мог не согласиться с «ограничительным» обвинением: он утверждал, что это было именно так из-за таких ограничений может возникнуть правильно сформированное математическое пространство аналогично тому, как структурное программирование ограничивает программирование ограниченный версия всех возможностей потока управления, доступных в простой, неограниченной неструктурированные программы.
Свободный от ценностей стиль ФП тесно связан с эквациональной логикой декартово-замкнутая категория.
Примеры языков
Канонический язык программирования функционального уровня FP. Другие включают FL, и J.
Смотрите также
- Конкатенативный язык программирования
- Функциональное программирование, декларативное программирование (сравнивать)
- Молчаливое программирование
- Программирование на уровне ценности, императивное программирование (контраст)
Рекомендации
- ^ Бэкус, Джон (1978). «Можно ли освободить программирование от стиля фон Неймана ?: Функциональный стиль и его алгебра программ» (PDF). Коммуникации ACM. 21 (8): 613–641. Дои:10.1145/359576.359579.
- ^ Худак, Пол (1989). «Концепция, эволюция и применение языков функционального программирования». Опросы ACM Computing. 21 (3): 359–411. Дои:10.1145/72551.72554.
внешняя ссылка
- Закрытые прикладные языки, FP и FL в книге Джона В. Бэкуса (публикации)