Разложение (модульность) в функциональных языках - PullRequest
9 голосов
/ 23 сентября 2010

Понял: функции (в FP) могут быть составлены так же, как компоненты в ООП. Для компонентов в ООП мы используем интерфейсы. Для функций мы можем использовать делегаты. Цель состоит в том, чтобы добиться разложения, модульности и взаимозаменяемости. Мы могли бы использовать внедрение зависимостей, чтобы сделать это проще.

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

Вопрос: Не могли бы вы показать достойное реальное приложение FP (желательно с открытым исходным кодом), которое использует декомпозицию на модули?

Бонусная болтовня: Какой обычный шаблон используется? Какие функции обычно разлагаются на отдельные модули? Реализованы ли когда-либо реализации в целях тестирования?

Ответы [ 2 ]

5 голосов
/ 23 сентября 2010

Некоторое время назад я изучал F # и интересовался теми же темами, поэтому я спросил о качественных проектах с открытым исходным кодом, чтобы извлечь уроки из .

Причина, по которой вы не видите ничего похожего на внедрение зависимостей в функциональном программировании, заключается в том, что это просто «естественно», потому что вы «внедряете зависимости», просто передавая или составляя функции. Или, как говорится в этой статье, « Внедрение функциональной зависимости == curry », но это всего лишь механизм one .

Пересматривать рамки не нужно. Если вам нужно что-то посмеяться, вы просто передаете функцию «заглушки».

См. Также этот вопрос о реальных приложениях Scala .

4 голосов
/ 23 сентября 2010

Либо мы говорим о разных целях (возможно, я довольно плохо знаком с терминологией ООП), либо вы многое упускаете из-за функционального программирования. Модули и абстракция (то есть взаимозаменяемость) были в основном изобретены на функциональном языке CLU . Основными документами по абстрактным типам являются защита Джеймса Морриса в языках программирования и Типы не являются наборами . Позднее большинство улучшений в модульных системах и абстракциях появилось в мире функционального программирования через ML -подобные языки.

Убийственное приложение для функционального программирования часто называют символической манипуляцией. Большинство компиляторов для функциональных языков написаны на самом языке, поэтому вы можете найти источник вашей любимой реализации функционального языка. Но в значительной степени любая нетривиальная программа (функциональная или нет) в некоторой степени написана модульным способом - может быть, я что-то упускаю из-за того, что вы подразумеваете под «декомпозицией»? Модульность будет более заметной и будет использовать более продвинутые концепции в строго типизированных языках с усовершенствованной модульной системой, такой как Standard ML и Objective Caml .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...