我如何在现实世界中使用函数式编程?

函数式语言是很好的,因为它们通过消除状态来避免错误,还因为它们可以自动方便地自动并行处理,而不必担心线程数量。

作为一名Win32开发者,我可以使用Haskell来处理我的应用程序的某些dll吗? 如果我这样做,是否有一个真正的优势,会自动采取我? 如果是这样,那么编译器呢?

F#能够并行处理您为多核心和cpu自动编写的函数吗? 你会看到任务pipe理器中的线程数增加吗?

基本上我的问题是,我如何以一种实用的方式开始使用Haskell,如果我真的能看到一些好处吗?

看来真正的世界Haskell这本书就是你正在寻找的东西。 你可以在网上免费阅读:

http://book.realworldhaskell.org/

F#不包含任何能将function传递给不同CPU或机器的魔法粉尘。 F#/ Haskell和其他函数式编程语言所做的是使您可以更轻松地编写可独立于其创build的线程或CPU进行处理的函数。

我不觉得在这里发布一个链接到我参与的播客,似乎有点closures,但在与马特·波德维索基谈话的“牧群法案”中,我们问了同样的问题,他给出了一些有趣的答案。 在这一集中,还有很多关于函数式编程的好链接。 我find了一个链接标题“ 为什么函数式编程很重要 ”,这可能会为您提供一些答案。

这也许是有趣的:“ 真实世界的function编程 ”

例子是在F#和C#中,但理论是相当通用的。 从我读过的(预发布)这绝对是有趣的,但到目前为止,我认为它使我想要越来越多地使用C#,使用像并行扩展库。

你没有提到,但我假设你正在使用C ++。 进入function的一个潜在的简单方法是通过C ++ / CLI到F#。 C ++包含“魔法精灵尘埃”(称为IJW:它只是工作),让您调出和托pipe代码。 有了这个,调用F#代码几乎就像从C#一样简单。

我在一个完全用C / C ++编写的程序(FreeSWITCH)中使用了它。 使用一个托pipe的C ++ / CLI(使用/ clr开关),它奇迹般地转换为托pipe代码,并从那里,我可以加载我的F#插件并执行它们。 为了使部署更容易,F#可以静态链接所有的依赖项,所以不需要部署F#运行时文件。 使CLR代码更具吸引力的另一件事是,您可以将托pipe代码(委托)传递给C代码,并且运行时会自动为您制作一个thunk。

如果你决定采取Haskell的方式,你要找的function是FFI:Foreign Function Interface。 但是,我不认为它会给你提供与F#的C ++ / CLI相同的集成级别。

目前我正在学习Haskell,当你开始学习Haskell时,它似乎并不是很有趣,因为学习的经验不像学习像C#这样的语言,它是一个全新的世界,但我注意到我可以编写非常非常复杂的expression式只用了几行代码,当我回头看看代码时,它更简洁明了,它小而紧。 我绝对喜欢它! 你确实可以编写真实世界的程序,这些程序将会更小,更容易维护,而且大多数其他语言都允许更复杂,我投票给你学习它!

祝你好运。

既然你提到Win32和DLL,我认为你正在处理非托pipe代码。 在这种情况下,GHC将会为你工作得很好。 去年年底,我在Windows下使用FFI编写了一个DDE服务器,与MS DDE库进行交谈,而且,令人惊讶的是,这是一个非常愉快的体验(尤其是考虑到我是一个Unix人员)。 Haskell的FFI是强大的(甚至支持,例如,从C或其他库中callbackHaskell函数),并且在编写C级代码时Haskell的types检查就像梦一样成真。

最后一点是Haskell的主要优势之一:types系统是惊人的。 这就是说,它就像任何强大的工具。 需要时间和精力来充分利用它。

所以是的,可以开始在Haskell中编写一小段代码,链接到代码的其余部分(尽pipe您可能会发现从与其他代码链接的小Haskell程序开始更容易),并且非常值得花费相当多的时间学习这个,并在任何地方使用它。 你可能会像我一样,计划一个与Windows代码紧密集成的相当重要的项目(在我的情况下,一个复杂的Excel插件)在Haskell。