5

我目前正在学习 Haskell,您更喜欢哪种语言(F# 或 Haskell)来编写通用应用程序?

你认为哪种语言更强大?

4

7 回答 7

25

我更喜欢 Haskell。

Jon Harrop 声称 Haskell 的工具很差,这让我思考了一下,因为我完全不同意这一点。我认为这里的问题部分是开发风格之一。让我们比较一下 F# 和 GHC 的一些与工具相关的特性:

  1. F# 有大量的可视化工具,而 GHC 没有。对我来说,缺乏可视化工具是无关紧要的:我使用 vi、Unix 命令行和高度定制的构建系统。对我在 F# 中的开发风格缺乏支持对我来说非常困难。另一方面,如果您更喜欢在 Visual-Studio 类型的环境下工作,那么您会有完全相反的意见。

  2. 我知道 F# 和/或 .NET 有一个非常好的调试器。GHC 只有一个在解释器中运行的有限调试器。多年来我没有使用过调试器(其中大部分是由于使用了测试驱动的开发),当您主要使用纯函数时,如在 Haskell 中,调试器的必要性要小得多。所以对我来说,缺少这个工具是无关紧要的。

  3. 图书馆。这主要取决于您需要哪些库,不是吗?如果您需要的库不存在,那么许多好的库也无济于事,并且拥有许多设计不佳的库可能没有那么有用。Haskell 的库肯定比 .NET 少,但它确实有一个合理的选择,而且其中许多的 API 设计质量非常非常高。

我不知道 F# 与本机代码库的接口是什么样的,但由于出色的 FFI,GHC 对此非常有用。我完全用 Haskell 编写了一个 Windows DDE 服务器(是的——不是一行 C,甚至不用处理来自 Windows C 库的回调),它花费的时间要少得多,而且比用 C 或 C++ 做同样的事情要简单得多。如果你需要原生代码接口,Haskell 无疑是​​更好的选择。

内存使用和性能的“不可预测性”是一个很好的观点。如果您知道自己在做什么,Haskell 在我看来实际上是可以合理预测的,但是当您开始时您不会知道自己在做什么,而且您将有很多东西要学。F# 与其他 .NET 语言更相似。

总的来说,这个问题可能更多地归结于平台而不是语言:GHC 生成本机代码的“Unixy 世界”与在 .NET 上运行的 F# 的“Windowsy 世界”之间的巨大差异不是语言问题。

于 2009-05-19T16:29:27.890 回答
19

我会去哈斯克尔。 HackageDB是专门为该语言编写的大量库集合。在 F# 的情况下,您必须使用大多数未使用函数式语言编写的库,因此它们不会像“优雅”那样使用。但是,当然,这在很大程度上取决于您想要进行多少函数式编程以及您想要使用它的项目的限制。即使是“通用”也不意味着它应该在所有情况下都使用;)

于 2008-11-02T06:44:16.493 回答
9

我会说 F#,因为您可以访问整个 .Net 框架。然而,这更像是图书馆的事情。

于 2008-09-27T05:26:15.977 回答
8

这取决于你想做什么:

Haskell 是两者中更纯粹的函数式语言。

F# 更像是一种混合语言,而不是纯粹的函数式语言,但有一组很棒的基类库,您可以使用它们在 Windows 或 Mono 上轻松地完成现代事情。

于 2008-09-27T04:47:38.300 回答
6

我认为 Jon Harrop 出于某种原因对 Haskell 有严重的失望。说它没有在学术界之外使用是不正确的,事实上它在投资银行中被广泛使用,而且远远超过 F# 和 OCaml,这是有充分理由的。如果你想要一份函数式编程的工作,那就学习 Haskell,因为 Haskell 程序员的广告比 F# 或 OCaml 多得多。我确信 F# 会越来越受欢迎,因为它背后有微软,而且它是从零开始的,但目前 Haskell 有明显的领先优势。

大概在 2 或 3 年前,OCaml 在实用函数式语言领域处于领先地位,但从那时起,Haskell 以更多的库、更多的特性、更好的性能和更广泛的商业用途超越了它。

于 2010-05-19T10:01:22.837 回答
4

您可能会发现 Neil Mitchell 的这篇博文提供了丰富的信息:

从 Haskell 的角度来看 F#

评论也很有启发性。

于 2008-12-11T12:54:39.267 回答
2

我会说这取决于你为什么要学习它。如果您这样做是为了体验纯函数式语言,请选择 Haskell。但是,如果您肯定要使用该语言的目的不止于此,那么 F# 可能是更好的选择。

于 2008-09-30T05:43:04.163 回答