Есть ли какие-то особые проблемы для функционального программирования во встроенной среде? - PullRequest
16 голосов
/ 11 декабря 2010

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

Так что я подумал над этим вопросом.Является ли встроенная среда частным случаем общих вычислений в глазах функционального программирования или это просто еще одна форма общего случая?Является ли проблема все в IO?Моя встроенная работа обычно влечет за собой около 90 - 95% периферийной работы ввода-вывода, и последним маленьким моментом является то, какой алгоритм работы я могу приспособить к нему и все же вернуть его к своему вводу-выводу вовремя.Делает ли такая работа функциональную программу, не соответствующую моим потребностям?

Наконец, если есть какие-либо проекты для встроенных проектов на Haskell, которые вы могли бы предложить, это было бы очень признательно.Спасибо.

Ответы [ 2 ]

13 голосов
/ 11 декабря 2010

Существует целый ряд многообещающих проектов по внедрению функционального программирования в мир встроенного программирования.

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

Встроенные проекты, использующие код на языке C, C ++ и Haskell, а не чисто функциональные проекты.Код на C, полученный из кода на Haskell, не является идиоматическим кодом на C, поэтому для участия в проекте коллаборационисты обычно должны быть знакомы с синтаксисом Haskell.

Проект Galois Copilot - один из режимов, подробно описанных во встроенных проектах Haskell.

http://corp.galois.com/blog/2010/9/22/copilot-a-dsl-for-monitoring-embedded-systems.html

Copilot использует Atom DSL, который кажется популярным

http://hackage.haskell.org/cgi-bin/hackage-scripts/package/atom-0.0.2

Существует также умеренно активная группа Google

https://groups.google.com/forum/#forum/fp-embedded

1 голос
/ 25 марта 2011

Лично я нашел Haskell.Atom совершенно не хватает.Это не функциональное программирование, это EDSL на функциональном языке.Вы ограничены конструкциями этого EDSL.Никаких функций высшего порядка, списков и прочего, которые делают функциональное программирование таким лаконичным и приятным.Это может быть весело для исключительно небольших проектов (например, мигание светодиода), но мне кажется, что код you записи (не только сгенерированный C-код) будет расти в геометрической прогрессии по сравнению с функциональностью, которую он обеспечивает.

Если вы хотите пойти по функциональному пути, я предлагаю вам прочитать эту статью Малкольма Уоллеса.Он немного устарел, но, по крайней мере, довольно подробно описывает, как выполнять низкоуровневый ввод-вывод, обработку IRQ и т. Д. На чистом функциональном языке ( Gofer , диалект Haskell).

Обновление: Существует также совершенно новый исследовательский проект , целью которого является создание функционального языка системного программирования на основе Haskell, Habit.К сожалению, кажется, что он существует в основном в теории.

...