功能语言很好,因为它们通过消除状态来避免错误,但也因为它们可以很容易地自动并行化,而不必担心线程数.
作为Win32开发人员,我可以将Haskell用于我的应用程序的一些dll吗?如果我这样做,是否会为我自动采取真正的优势?如果是这样,那么编译器给我这个优势呢?
F#是否并行自动编写多个内核和cpu的函数?你会看到任务管理器中的线程数增加吗?
基本上我的问题是,如何以实用的方式开始使用Haskell,如果我这样做,我真的会看到一些好处吗?
看起来像真实世界Haskell这本书正是你正在寻找的.你可以在网上免费阅读:
http://book.realworldhaskell.org/
F#不包含任何神奇的小精灵粉尘,它会将功能传递给不同的CPU或机器.F#/ Haskell和其他函数式编程语言的功能使您可以更轻松地编写可以独立于创建的线程或CPU进行处理的函数.
我觉得在这里发布一个我参与的播客的链接感觉不对,似乎有些偏差,但在我们与Matt Podwysocki交谈的Herding Code插曲中,我们问了同样的问题并给出了一些有趣的答案.在那集中还有许多与函数式编程相关的良好链接.我找到了一个链接标题" 为什么功能编程很重要 "可能会为您提供一些答案.
这可能也很有趣:" 真实世界的功能编程 "
例子是F#和C#,但理论相当通用.从我读过的内容(预发布)来看,它确实很有意思,但到目前为止,我认为它让我想要越来越多地使用C#,使用像Parallel Extensions这样的库.
你没有提到,但我假设你正在使用C++.实现功能的一种可能的简单方法是通过C++/CLI到F#.C++包含"魔法小精灵粉尘"(称为IJW:It Just Works),允许您调用和调出托管代码.有了这个,调用F#代码几乎和C#一样简单.
我在一个程序(FreeSWITCH)中使用它,它完全用C/C++编写.使用单个托管C++/CLI(使用/ clr开关),它会神奇地转换为托管代码,从那里,我可以加载我的F#插件并执行它们.为了使部署更容易,F#可以静态链接其所有依赖项,因此您无需部署F#运行时文件.使CLR代码具有吸引力的另一个原因是您可以将托管代码(委托)传递给C代码,并且运行时会自动为您做出贡献.
如果您决定采用Haskell方式,那么您将要寻找的功能是FFI:外部函数接口.但是,我不认为它会给你与F#的C++/CLI相同的集成度.
我现在正在学习Haskell,当你开始学习它时,它似乎并不是很有趣,因为学习经验并不像学习像C#这样的语言,它是一个全新的世界,但我注意到我写得非常复杂表达式只需几行代码,当我回顾代码时,它更简洁,更小巧紧凑.我非常喜欢它!您确实可以编写更小,更易于维护的实际程序,并且比大多数其他语言允许的更复杂,我投票给您学习它!
祝好运.