Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我已经知道OCaml,我应该学习Haskell还是F#?_Haskell_F#_Ocaml_Language Comparisons - Fatal编程技术网

如果我已经知道OCaml,我应该学习Haskell还是F#?

如果我已经知道OCaml,我应该学习Haskell还是F#?,haskell,f#,ocaml,language-comparisons,Haskell,F#,Ocaml,Language Comparisons,我想知道我是应该继续学习OCaml还是应该改用F#或Haskell 以下是我最感兴趣的标准: 寿命 哪种语言会持续更长时间?我不想学习一些可能在几年内被用户和开发人员抛弃的东西 Will Inria、微软、格拉斯哥大学从长远来看继续支持他们各自的编译器? 实用性 像这样的文章让我不敢使用Haskell。哈希表是快速检索的最佳结构。Haskell的支持者建议使用Data.Map,它是一个二叉树 我不喜欢被束缚在庞大的.NET框架上,除非好处很大 我希望能够开发不仅仅是解析器和数学程序 设

我想知道我是应该继续学习OCaml还是应该改用F#或Haskell

以下是我最感兴趣的标准:

  • 寿命

    • 哪种语言会持续更长时间?我不想学习一些可能在几年内被用户和开发人员抛弃的东西 Will Inria、微软、格拉斯哥大学从长远来看继续支持他们各自的编译器?
  • 实用性

    • 像这样的文章让我不敢使用Haskell。哈希表是快速检索的最佳结构。Haskell的支持者建议使用Data.Map,它是一个二叉树
    • 我不喜欢被束缚在庞大的.NET框架上,除非好处很大
    • 我希望能够开发不仅仅是解析器和数学程序
  • 设计精良

    • 我喜欢我的语言保持一致
请用文章中的逻辑论点和引文来支持你的观点。谢谢。

F#和OCaml在语法上非常相似,但显然,F#与.NET的结合更好

你学习或使用哪一个应该取决于你的目标平台

在VS2010中,F#将被包括在内,并且由于它编译为.NET字节码,因此它可以在支持用于它的.NET版本的windows操作系统上使用。这将为您提供一个很大的区域,但目前OCaml没有F#的限制,因为F#似乎没有利用机器上的所有处理器,但是,这可能是因为F#仍在开发中,这可能是一个不那么重要的特性

还有其他的函数式语言,比如Erlang,你可以看看,但是,基本上,如果你精通一种FP语言,那么你应该能够相当快地学会另一种,所以,只需选择一种你喜欢的语言,并尝试用它开发有趣且富有挑战性的应用程序


最终,语言编写者将找到一种方法,使OO语言能够与多核一起很好地工作,FP可能会再次落伍,但这似乎不会很快发生。

这个问题没有简单的答案,但这里有一些事情需要考虑:

Haskell和OCaml都是具有强大实现的成熟语言。事实上,Haskell有多种很好的实现,但我不认为这是它对您有利的主要方面

F#要年轻得多,谁能预测微软会把它带到哪里?你对此的看法更多地取决于你对微软的看法,而不是任何人能告诉你的编程语言

OCaml(或者一般来说是ML)是一种很好的实用语言选择,它支持做一些很酷的功能性工作,而不会强迫您以一种可能不舒服的方式工作。您可以充分利用代数数据类型、模式匹配、类型推断和其他人喜欢的东西。哦,还有物体

Haskell为您提供了所有这些(除了对象之外),但也或多或少地迫使您重新思考您所知道的关于编程的一切。这可能是一件非常好的事情,如果你想学习一些新的东西,但它可能比你想咬下来。我这样说是因为他可能只是在成为一名高效、快乐的Haskell程序员的道路上走了一半

OCaml和Haskell都被用来编写许多不同类型的程序,而不仅仅是编译器和人工智能之类的东西。谷歌是你的朋友

最后一点注意:OCaml为您提供了哈希表,但如果您真的想要接受函数式编程,那么在代码中使用它是不明智的。持久化树(比如Data.Map)确实是Haskell的正确解决方案,并且有很多好的属性,这是学习Haskell时需要了解的很酷的事情之一

长寿

没有人能预测未来,但是

  • OCaml和Haskell多年来一直生活得很好,这对他们的未来是个好兆头
  • 当F#搭载VS2010时,MS将承担至少5年的法律义务来支持它
实用性

性能:我对Haskell没有足够的第一手经验,但根据二手和第三手信息,我认为OCaml或F#更为实用,因为我认为在Haskell中不太可能获得与在OCaml或F#中相同的运行时性能

库:轻松访问.Net Framework是F#的一大好处。如果你愿意,你可以把它看作是“与这个庞大的东西联系在一起”,但不要忘记“你可以访问一个庞大的图书馆,里面有很多非常有用的东西”。与.Net的“连通性”是F#的一大卖点。F#更年轻,因此第三方库更少,但除了.Net上的“收件箱”库之外,已经有了,例如,和其他一些库

工具:我没有足够的个人经验进行比较,但我认为VS与F#的集成优于您今天在OCaml/Haskell中发现的任何东西(并且F#将在明年继续改进)

更改: F#在VS2010即将发布其第一个受支持的版本时仍在不断变化,因此在不久的将来,您可能不得不忍受对语言/库的一些突破性变化

精心设计

哈斯克尔绝对是美丽的,始终如一的。我对OCaml了解不够,但我的直觉是它同样吸引人。我认为F#比这两个都“大”,这意味着更多的死角和不一致性(主要是由于调解了FP和.Net之间的阻抗不匹配),但总体上F#对我来说仍然感觉“干净”,并且确实存在的不一致性至少是合理/有意的

总体上

在我看来,你会在'良好的状态'知道这三种语言中的任何一种