haskell 如何在真实的世界中使用函数式编程?[closed]

mitkmikd  于 2023-02-04  发布在  其他
关注(0)|答案(6)|浏览(163)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

八年前就关门了。
Improve this question
函数式语言很好,因为它们通过消除状态来避免bug,而且还因为它们可以很容易地自动并行化,而不必担心线程数。
作为一个Win32开发者,我可以在我的应用程序中使用Haskell吗?如果我这样做了,我会自动获得一个真实的的优势吗?如果是的话,是什么给了我这个优势?编译器?
F#是否会自动并行化您在多个内核和CPU上编写的函数?您是否会看到Task Manager中的线程数增加?
我如何才能开始使用Haskell在一个实际的方式,我真的会看到一些好处,如果我这样做?

zpgglvta

zpgglvta1#

看起来 Real World Haskell 这本书正是您要找的。您可以在线免费阅读。

monwx1rj

monwx1rj2#

F#不包含任何可以将函数传递给不同CPU或机器的魔法精灵尘。F#/Haskell和其他函数式编程语言使您更容易编写可以独立于创建它们的线程或CPU进行处理的函数。
我觉得在这里贴一个我参与的播客的链接不太合适。这看起来有点偏离主题,但是在 Herding Code 这一集里,我们问了同样的问题,Matt Podwysocki给出了一些有趣的答案。在那一集里也有很多关于函数式编程的好链接。我发现了一个名为“Why Functional Programming Matters“的链接。这可能会为你提供一些答案。

zpgglvta

zpgglvta3#

这可能也很有趣:"Real World Functional Programming"
F#和C#都有例子,但理论上是相当通用的。从我读到的(预发布版)来看,它确实很有趣,但到目前为止,我认为它让我越来越想坚持使用C#,使用像并行扩展这样的库。

oiopk7p5

oiopk7p54#

你没有提到,但我假设,你正在使用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:然而,我不认为它能给予与C++/CLI和F#相同的集成度。

dhxwm5r4

dhxwm5r45#

我自己也在学习Haskell,刚开始学习的时候,它看起来并不有趣,因为学习的体验和学习C#这样的语言完全不同。
这是一个全新的世界,但我注意到我可以用几行代码写出非常非常复杂的表达式,当我回头看代码时,它要简洁得多;它又小又紧。
我绝对喜欢它!你确实可以编写比大多数其他语言更小、更容易维护、更复杂的真实世界的程序。我支持你学习它!!

mzillmmw

mzillmmw6#

既然你提到了Win32和DLL,我想你正在使用非托管代码。在这种情况下,GHC将非常适合你。去年年底,我在Windows下使用FFI编写了一个DDE服务器,用于与Microsoft DDE库通信,令人惊讶的是,这是一个非常愉快的体验(特别是考虑到我是一个Unix用户)。
Haskell的FFI功能强大(甚至支持从C或其他库回调到Haskell函数),在编写C级代码时使用Haskell的类型检查就像梦想成真一样。
最后一点是Haskell的主要优势之一:类型系统是惊人的。也就是说,它就像任何强大的工具一样;它需要时间和努力来很好地利用它。
因此,可以从用Haskell编写小代码开始,然后链接到其余代码(尽管你可能会发现从链接到你的其他代码的小Haskell程序开始更容易),而且花相当多的时间学习这方面的知识并在任何可能的地方使用它是非常值得的。在Haskell中规划一个与Windows代码(在我的例子中,是一个复杂的Excel插件)紧密集成的相当大的项目。

相关问题