哪种语言更适合通用编程,F#或者Haskell?

时间:2020-03-06 14:49:04  来源:igfitidea点击:

我目前正在学习Haskell,对于通用应用程序的编程,我们更喜欢哪种语言(适用于Haskell)?

我们认为哪种语言更强?

解决方案

这取决于我们想做什么:

Haskell是两者中较为纯函数化的语言。

Fis不仅是一种混合语言,而且不是纯粹的功能,而是具有大量的基类库,我们可以使用它们在Windows或者Mono上轻松地完成现代工作。

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

我会说这取决于我们为什么要学习它。如果我们是为了体验纯函数式语言而设计的,请选择Haskell。但是,如果我们肯定要使用该语言,那么Fis可能是更好的选择。

我去Haskell。 HackageDB是专门为该语言编写的大量库的集合。在Fyou的情况下,大多数情况下都必须使用那些没有考虑功能语言编写的库,这样它们就不会像使用时那样"优雅"。但是,当然,这很大程度上取决于我们要执行多少功能编程以及要对其使用项目的约束。即使是"通用"也不意味着在所有情况下都应使用它;)

我们可能会发现Neil Mitchell撰写的这篇博文内容丰富:

F从Haskell的角度

评论也很有启发性。

我更喜欢Haskell。

乔恩·哈罗普(Jon Harrop)声称Haskell工具差劲,这引起了我的思考,因为我完全不同意这一点。我认为这里的问题部分是开发风格之一。让我们比较一下Fand GHC的一些与工具相关的特征:

  • F#具有广泛的视觉工具,而GHC没有。对我来说,缺少可视化工具是无关紧要的:我使用vi,Unix命令行和大量自定义的构建系统。缺乏对我在F#中的开发风格的支持会为我带来很大的尝试。另一方面,如果我们更喜欢在Visual Studio类型的环境下工作,则会有相反的看法。
  • 我了解F#和/或者.NET具有非常好的调试器。 GHC只有在解释器中运行的有限调试器。我已经多年没有使用调试器了(大部分是由于使用测试驱动的开发),并且当我们主要使用纯函数时(例如在Haskell中),调试器就没有那么多了。因此,对我而言,缺少此工具是无关紧要的。
  • 图书馆。这主要取决于我们需要的库,不是吗?如果我们需要的库不存在,那么很多好的库将无济于事,而且拥有许多设计不当的库可能没有那么大的帮助。 Haskell当然比.NET拥有更少的库,但是它确实具有合理的选择,而且其中许多API设计的质量非常非常高。

我不知道F#到本机代码库的接口是什么样的,但是由于出色的FFI,GHC对此非常有用。我完全用Haskell写了Windows DDE服务器(不是C语言,甚至不处理Windows C库的回调),它所花的时间要少得多,比用C或者C ++做同样的事情要简单得多。如果我们需要本机代码接口,Haskell当然是更好的选择。

内存使用和性能的"不可预测性"是一个好主意。如果我们知道自己在做什么,Haskell在我看来实际上是可以合理预测的,但是当我们开始时却不知道自己在做什么,并且我们将学到很多东西。 Fis与其他.NET语言更加相似。

总的来说,这个问题可能比语言问题更多地归结到平台上:生成本机代码的GHC的" Unixy世界"与.NET上的Frunning的" Windowsy世界"之间的巨大差异不是语言问题。

我认为,乔恩·哈罗普(Jon Harrop)出于某种原因严重压制了Haskell。完全没有在学术界以外使用它是不正确的,实际上,它已广泛用于投资银行业务,并且其使用率远超过Fand OCaml,这是有充分理由的。如果我们想进行职务函数式编程,那么请学习Haskell,因为为Haskell程序员宣传的职位远远多于针对OCaml的职位。我敢肯定,Fwill会受到欢迎,因为它的背后是Microsoft,而且它从零开始,但目前Haskell拥有明显的领先优势。

大约2或者3年前,OCaml以实用的功能语言领导了这一领域,但是从那时起,Haskell凭借更多的库,更多的功能,更好的性能和更广泛的商业用途取代了它。