Программирование на функциональном уровне - Function-level programming

В информатике функциональный уровень программирование относится к одному из двух противоположных парадигмы программирования идентифицировано Джон Бэкус в своей работе над программами как математическими объектами, другой программирование на уровне ценностей.

В его 1977 г. Премия Тьюринга На лекции Бэкус изложил то, что он считал необходимостью перехода к другой философии в дизайне языков программирования:[1]

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

Он разработал FP быть первым язык программирования специально для поддержки стиля программирования на уровне функций.

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

Вступление

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

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

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

В отличие от функционального программирования

Когда Бэкус изучил и опубликовал свой стиль программирования на функциональном уровне, его сообщение в основном было неправильно понято.[2] как поддержку традиционных функциональное программирование стилевые языки вместо своего собственного FP и его преемник FL.

Бэкус называет функциональное программирование прикладное программирование[требуется разъяснение ]; его программирование на уровне функций - особый, ограниченный тип.

Ключевым отличием от функциональных языков является то, что язык Бэкуса имеет следующую иерархию типов:

  • атомы
  • функции, которые переводят атомы в атомы
  • Функции высшего порядка (которые он называет «функциональными формами»), которые превращают одну или две функции в функции

... и единственный способ генерировать новые функции - использовать одну из фиксированных функциональных форм: вы не можете построить свою собственную функциональную форму (по крайней мере, не в FP; вы можете в FFP (Формальная FP )).

Это ограничение означает, что функции в FP являются модуль (генерируемые встроенными функциями) над алгеброй функциональных форм и, таким образом, алгебраически поддаются обработке. Например, общий вопрос о равенстве двух функций эквивалентен проблема остановки, и неразрешимо, но равенство двух функций в FP - это просто равенство в алгебре, и поэтому (как считает Бэкус) проще.

Даже сегодня многие пользователи лямбда-стиль языки часто неверно интерпретируют функциональный подход Бэкуса как ограничительный вариант лямбда-стиля, который де-факто ценностный стиль. Фактически, Бэкус не мог не согласиться с «ограничительным» обвинением: он утверждал, что это было именно так из-за таких ограничений может возникнуть правильно сформированное математическое пространство аналогично тому, как структурное программирование ограничивает программирование ограниченный версия всех возможностей потока управления, доступных в простой, неограниченной неструктурированные программы.

Свободный от ценностей стиль ФП тесно связан с эквациональной логикой декартово-замкнутая категория.

Примеры языков

Канонический язык программирования функционального уровня FP. Другие включают FL, и J.

Смотрите также

Рекомендации

  1. ^ Бэкус, Джон (1978). «Можно ли освободить программирование от стиля фон Неймана ?: Функциональный стиль и его алгебра программ» (PDF). Коммуникации ACM. 21 (8): 613–641. Дои:10.1145/359576.359579.
  2. ^ Худак, Пол (1989). «Концепция, эволюция и применение языков функционального программирования». Опросы ACM Computing. 21 (3): 359–411. Дои:10.1145/72551.72554.

внешняя ссылка