如何在现实世界中使用函数式编程? [关闭]

Posted

技术标签:

【中文标题】如何在现实世界中使用函数式编程? [关闭]【英文标题】:How can I use functional programming in the real world? [closed] 【发布时间】:2010-09-13 15:57:23 【问题描述】:

函数式语言很好,因为它们通过消除状态来避免错误,还因为它们可以轻松地为您自动并行化,而不必担心线程数。

作为一名 Win32 开发人员,我可以将 Haskell 用于我的应用程序的某些 dll 吗?如果我这样做了,是否会自动为我带来真正的优势?如果是这样,是什么给了我这个优势,编译器?

F# 是否会自动为您并行化您跨多个内核和 cpu 编写的函数?你会看到任务管理器中的线程数增加吗?

基本上我的问题是,我怎样才能以实用的方式开始使用 Haskell,如果我这样做,我真的会看到一些好处吗?

【问题讨论】:

就个人而言,我会研究 erlang - 但这就是我。 澄清一下,我已经使用过几种不同的函数式编程语言,并且我知道它们是如何工作的以及它们之间的区别是什么。但这个问题很具体:我如何将它应用到现实世界中。 Why functional languages? 的可能重复项 【参考方案1】:

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

http://book.realworldhaskell.org/

【讨论】:

我正在等待它打印出来。看来这将是最好的书之一。我敢打赌,它会比 Practical Ocaml 为 Ocaml 更好地服务于对 Haskell 感兴趣的人【参考方案2】:

F# 不包含任何可以将功能传递给不同 CPU 或机器的魔法小精灵。 F#/Haskell 和其他函数式编程语言所做的就是让您更轻松地编写可以独立于创建它们的线程或 CPU 进行处理的函数。

我觉得在这里发布我参与的播客的链接不正确,这似乎有点不对劲,但在我们与 Matt Podwysocki 交谈的 Herding Code 插曲中,我们问了同样的问题,他给出了一些有趣的答案。在那一集中还有很多与函数式编程相关的好链接。我找到了一个标题为“Why Functional Programming Matters”的链接,这可能会为您提供一些答案。

【讨论】:

那我给你发帖:herdingcode.com/?p=45 :) ***.com/questions/682710/…【参考方案3】:

这也可能很有趣: "Real World Functional Programming"

示例在 F# 和 C# 中,但理论相当通用。 从我读过的(预发布)来看,这绝对很有趣,但到目前为止,我认为这让我越来越想使用 C#,使用 Parallel Extensions 之类的库。

【讨论】:

您是否还觉得“越来越想坚持使用 C#”? F# 提供了一些有趣的功能。我得到的最大提升是更少的打字(这意味着在用代码表达解决方案的过程中摩擦更少)。 @Daniel 在某些方面,甚至更是如此;p 不过,我使用的工具可能是非典型的。【参考方案4】:

您没有提到,但我假设您使用的是 C++。进入函数式的一种可能简单的方法是通过 C++/CLI 到 F#。 C++ 包含“神奇的精灵尘埃”(称为 IJW:It Just Works),允许您调用和调用托管代码。有了这个,调用 F# 代码几乎和从 C# 中一样简单。

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

如果您决定采用 Haskell 方式,您将寻找的功能是 FFI:外部函数接口。但是,我认为它不会为您提供与 C++/CLI 与 F# 相同的集成水平。

【讨论】:

【参考方案5】:

我目前正在自己​​学习 Haskell,当你开始学习它时,它似乎并不吸引人,因为学习体验与学习 C# 之类的语言完全不同,这是一个全新的世界,但我注意到我可以编写非常非常复杂的表达式,只有几行代码,当我回头看代码时,它更加简洁,小巧紧凑。我非常喜欢它!您确实可以编写比大多数其他语言允许的更小、更易于维护且更复杂的实际程序,我投票支持您学习它!

祝你好运。

【讨论】:

【参考方案6】:

既然您提到了 Win32 和 DLL,我认为您正在使用非托管代码。在这种情况下,GHC 将非常适合您。去年年底,我在 Windows 下使用FFI 编写了一个 DDE 服务器来与 MS DDE 库通信,令人惊讶的是,这是一次非常愉快的体验(尤其是考虑到我是一个 Unix 人)。 Haskell 的 FFI 功能强大(甚至支持,例如,从 C 或其他库中回调到 Haskell 函数),并且在编写 C 级代码时拥有 Haskell 的类型检查就像梦想成真。

最后一点是 Haskell 的主要优势之一:类型系统令人惊叹。也就是说,它就像任何强大的工具一样;充分利用它需要时间和精力。

所以是的,可以开始在 Haskell 中编写链接到其余代码的少量代码(尽管您可能会发现从链接到其他代码的小型 Haskell 程序开始更容易),而且非常值得花大量时间学习并尽可能使用它。你可能会像我一样,在 Haskell 中计划一个与 Windows 代码(在我的例子中是复杂的 Excel 插件)紧密集成的相当大的项目。

【讨论】:

以上是关于如何在现实世界中使用函数式编程? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

理解函数式编程

为什么纯函数式语言至今无法流行起来?

1.1.1函数式编程

函数式编程第一弹

函数式编程

函数式编程与Lambda表达式(上)