所以我开始感受到功能性编程与命令式编程的区别。就像任何好的转换器一样,我正在用Haskell锤子查看事物,并试图想象我的嵌入式编程工作如何被塑造成适合该工具的钉子。
这让我想到了这个问题。嵌入式环境是功能编程眼中的通用计算的特例还是仅仅是一般情况的另一种形式? IO中的挑战是全部吗?我的嵌入式工作通常需要大约90-95%的外围IO工作,最后一点点的东西是我可以适应的算法工作,并且仍然能够及时回到我的IO。这种工作是否使功能性程序不能满足我的需求?
最后,如果您可以建议嵌入Haskell项目的任何项目,那将非常感激。感谢。
答案 0 :(得分:13)
有许多有希望的项目可以将函数式编程引入嵌入式编程领域。
似乎一种常见的方法是利用类型安全性和其他正确性功能,但放弃像ghc这样的重量级运行时。由于放弃了运行时,您放弃了垃圾收集等功能。相反,嵌入式Haskell项目使用输出实时C代码的嵌入式DSL语言。
使用混合C,C ++和Haskell代码的嵌入式项目,而不是纯粹的功能项目。从Haskell代码生成的C代码不是惯用的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群组
答案 1 :(得分:1)
我个人认为Haskell.Atom非常缺乏。它不是函数式编程,它是一种函数式语言的EDSL。您仅限于该EDSL的构造。没有高阶函数,列表推导和所有其他使函数式编程如此简洁和愉快的东西。对于特别小的项目(比如闪烁的LED)可能会很有趣,但对我来说,似乎你编写的代码(不仅仅是生成的C代码)与它提供的功能相比会呈指数级增长。 / p>
如果你想走功能路线,我建议你阅读Malcolm Wallace的paper。这有点过时但至少它详细描述了如何用纯函数式语言(Gofer,Haskell方言)进行低级I / O,IRQ处理等。
更新:还有一个非常新的research project,其目标是制作基于Haskell,Habit的功能系统编程语言。不幸的是,它似乎主要存在于理论中。