我目前正在学习Haskell,您更喜欢编写通用应用程序的哪种语言(F#或Haskell)?
您认为哪种语言更强大?
我更喜欢Haskell.
Jon Harrop声称Haskell工具很差,这让我有点思考,因为我非常不同意这一点.我认为这里的问题部分是发展方式.让我们比较F#和GHC的一些与工具相关的特性:
F#拥有广泛的可视化工具,而GHC则没有.对我来说,缺乏可视化工具是无关紧要的:我使用vi,Unix命令行和大量自定义构建系统.在F#中缺乏对我的开发风格的支持对我来说非常有用.另一方面,如果您更喜欢在Visual-Studio类型的环境下工作,那么您会有相反的观点.
我理解F#和/或.NET有一个非常好的调试器.GHC只有一个在解释器中运行的有限调试器.多年来我没有使用调试器(大部分原因是由于使用了测试驱动的开发),当你主要使用纯函数时,就像在Haskell中一样,调试器就不那么必要了.所以对我来说,缺少这个工具是相当无关紧要的.
库.这主要取决于您需要的库,不是吗?如果你需要的那个不存在,很多好的没有帮助,并且有很多设计不良的库可能没那么有用.Haskell当然拥有比.NET少的库,但它确实有合理的选择,并且其中许多API的设计质量非常非常高.
我不知道F#与本机代码库的接口是什么样的,但GHC非常适合这一点,因为它具有出色的FFI.我完全在Haskell中编写了一个Windows DDE服务器(是的 - 不是C行,甚至不处理来自Windows C库的回调),它花费的时间要少得多,并且比在C或C++中做同样的事情要简单得多.如果您需要本机代码接口,Haskell肯定是更好的选择.
内存使用和性能的"不可预测性"是一个好点.如果你知道你在做什么,Haskell在我看来实际上可以合理地预测,但是当你开始时你不会知道你在做什么,而且你还有很多需要学习的东西.F#与其他.NET语言更相似.
总的来说,这个问题可能更多地归结为平台而不是语言:GHC生成本机代码的"Unixy世界"与运行在.NET上的F#"Windowsy世界"之间的巨大差异不是语言问题.
我会去Haskell. HackageDB是一个很好的库集合,专门为该语言编写.在F#的情况下,你必须使用大多数没有用函数式语言编写的库,因此它们不会像使用那样"优雅".但是,当然这在很大程度上取决于你想要做多少功能编程以及你想要用它的项目的约束.即使是"通用目的"也不意味着它应该在所有情况下使用;)
我会说F#,因为你可以访问整个.Net框架.然而,这更像是图书馆的事情.
这取决于你想做什么:
Haskell是两者中更纯粹的功能语言.
F#更像是一种混合语言,而不是纯粹的功能,但有一组很棒的基类库,你可以用它们在Windows或Mono上轻松地做现代事物.
我认为Jon Harrop出于某种原因对Haskell严重打击.事实上,它并没有在学术界之外使用,因此它被广泛用于投资银行业务,远远超过F#和OCaml,并且有充分的理由.如果你想要一个工作函数式编程,那么学习Haskell,因为为Haskell程序员宣传的帖子远远多于F#或OCaml.我确信F#会受到欢迎,因为它背后有微软,而且从零开始,但目前Haskell有明显的领先优势.
可能在2或3年前,OCaml在实用的功能语言领域处于领先地位,但从那以后,Haskell已经用更多的库,更多功能,更好的性能和更广泛的商业用途取代了它.