功能语言很好,因为它们通过消除状态来避免错误,但也因为它们可以很容易地自动并行化,而不必担心线程数。
作为Win32开发人员,我可以将Haskell用于我的应用程序的一些dll吗?如果我这样做,是否会为我自动采取真正的优势?如果是这样,那么编译器给我这个优势呢?
F#是否会自动为多个内核和cpu自动编写函数?你会看到任务管理器中的线程数增加吗?
基本上我的问题是,如何以实用的方式开始使用Haskell,如果我这样做,我真的会看到一些好处吗?
答案 0 :(得分:41)
看起来真实世界的Haskell正是您所寻找的。你可以在网上免费阅读:
答案 1 :(得分:25)
F#不包含任何将功能传递给不同CPU或机器的魔法小精灵粉尘。 F#/ Haskell和其他函数式编程语言的功能使您可以更轻松地编写可以独立于创建的线程或CPU进行处理的函数。
我觉得在这里发布一个我参与的播客的链接感觉不对,似乎有点偏离,但在我们与Matt Podwysocki交谈的Herding Code一集中,我们问了同样的问题,他给出了一些有趣的答案。在那集中还有许多与函数式编程相关的良好链接。我找到了一个链接标题“Why Functional Programming Matters”,这可能会为您提供一些答案。
答案 2 :(得分:14)
这可能也很有趣: “Real World Functional Programming”
示例在F#和C#中,但理论相当通用。 从我读过的内容(预发行版)来看,它确实很有趣,但到目前为止,我认为它让我想要越来越多地使用C#,使用像Parallel Extensions这样的库。
答案 3 :(得分:8)
您没有提及,但我假设您正在使用C ++。实现功能的一种可能的简单方法是通过C ++ / CLI到F#。 C ++包含“魔法小精灵粉尘”(称为IJW:It Just Works),允许您调用和调出托管代码。有了这个,调用F#代码几乎和C#一样简单。
我在一个程序(FreeSWITCH)中使用它,它完全用C / C ++编写。使用单个托管C ++ / CLI(使用/ clr开关),它会神奇地转换为托管代码,从那里,我可以加载我的F#插件并执行它们。为了使部署更容易,F#可以静态链接其所有依赖项,因此您无需部署F#运行时文件。使CLR代码具有吸引力的另一个原因是你可以将托管代码(委托)传递给C代码,运行时会自动为你做一个thunk。
如果您决定采用Haskell方式,那么您将要寻找的功能是FFI:外部函数接口。但是,我不认为它会给你与F#C ++ / CLI相同的集成度。
答案 4 :(得分:6)
我现在正在学习Haskell,当你开始学习它时,它似乎并不是很有趣,因为学习经验并不像学习像C#这样的语言,它是一个全新的世界,但我注意到我可以写在几行代码中非常复杂的表达式,当我回顾代码时,它更简洁,更小巧紧凑。我非常喜欢它!您确实可以编写更小,更易于维护的实际程序,以及大多数其他语言允许的更复杂的程序,我投票给您学习它!
祝你好运。答案 5 :(得分:4)
既然你提到了Win32和DLL,我认为你正在使用非托管代码。在这种情况下,GHC将非常适合您。去年年底,我在Windows下使用FFI编写了一个DDE服务器与MS DDE库进行对话,令人惊讶的是,这是一次非常愉快的体验(特别是考虑到我是一个Unix人)。 Haskell的FFI功能强大(甚至支持,例如,从C或其他库回调到Haskell函数),并且在编写C级代码时进行Haskell类型检查就像梦想成真。
最后一点是Haskell的主要优势之一:类型系统令人惊叹。那就是说,它就像任何强大的工具;它需要时间和精力来充分利用它。
所以是的,可以开始在Haskell中编写一小段代码链接到你的代码的其余部分(尽管你可能会发现更容易从连接到其他代码的小Haskell程序开始),而且它是非常值得花费相当多的时间来学习并尽可能地使用它。您最终可能会像我一样,计划在Haskell中与Windows代码紧密集成的相当重要的项目(在我的例子中,是一个复杂的Excel加载项)。