我想知道如果我要继续学习OCaml或开关于F#或Haskell.

这是条件,我最感兴趣的是:

  • 长寿

    • 哪种语言将会持续更长的时间?我不想要学习的东西可能被抛弃在一个几年通过用户和开发者。
    • 将什么样的、微软、格拉斯哥大学继续支持他们各自的编译器的长期运行?
  • 实用性

    • 喜欢的文章 让我害怕使用Haskell.哈希表是最佳的结构,用于快速检索。Haskell的支持者在那里建议使用的数据。地图,它是二进制的树。
    • 我不喜欢被捆绑到一个庞大。净框架,除非收益是巨大。
    • 我希望能够开发更多的不仅仅是分析程序和数学课程。
  • 好的设计

    • 我喜欢我的语言是一致的。

请支持你的意见与逻辑的论点,引用的文章。谢谢你。

有帮助吗?

解决方案

长寿

  • Haskell是 事实上 占主导地位的语言的功能编程的研究。Haskell98将持续许多年的时间在稳定的形式,以及一些所谓的Haskell可能持续10到30年---虽然语言,将继续演变。该社区有一个主要投资在Haskell,甚至如果主GHC开发商撞车的明天(着名的"总的错误在剑桥"的问题),还有很多其他人可能步骤的板。还有其它的、较精心编译器。

  • 加枫是通过一个控制小组在什么样的,法语国家实验室。他们也有重要投资,其他人也是投资在加枫和代码是开放源代码和编译是不是太复杂,所以,也将维持很长一段时间。我预测加枫将更加稳定的比Haskell,为什么样的人会出现不再使用它作为探索新的语言的想法(或至少他们是这样做在一个较小的比率在过去).

  • 谁知道什么公司会怎么办?如果F#是否成功,微软可能会支持它为20年。如果它不成功,他们可能拔掉插头,在2012年。我不能猜测,也不会尝试。

实用性

哈希表是最佳的结构,用于快速检索。Haskell的支持者在那里建议使用的数据。地图,它是二进制的树。

这取决于你是什么搜索。当你的钥匙是串, 三搜索树木 正常速度比哈希表。当你的钥匙是整数,Okasaki和吉尔 二进制帕特里夏*树木 竞争力与哈希。如果你真想要,可以建立一个哈希表在Haskell使用IO单,但这是罕见的需要。

我认为总会有一个业绩刑懒惰的评估。但是,"实际"是不相同的"尽快".以下是真实的性能:

  • 这是最简单的预测的时间和空间的行为加枫程序。

  • F#是在中间(谁真正知道什么。净和JIT会做什么?).

  • 这是最难预测的时间和空间行为的Haskell的程序。

  • Haskell有最好的分析工具,并从长远来看,这是什么产生最佳的效能。

我希望能够开发更多的不仅仅是分析程序和数学课程。

对于一个想法的范围内什么是可能在Haskell,检查出来的 xmonad 窗口管理和 特色ofpackageshackage.haskell.org.

我不喜欢被捆绑到一个庞大。净框架,除非收益是巨大。

我不能评论:

好的设计

我喜欢我的语言是一致的。

一点在其评估的一致性:

  • Haskell的具体语法是非常好的设计;我不断地留下深刻印象的良好工作所做的Haskell委员会。OCaml法是确定的,但受到由比较。F#开始从加枫核心的语法和具有许多相似之处。

  • Haskell和OCaml都具有非常一致的故事关于操作超载。Haskell有一个一致和强大的机制,可以延长自己。OCaml没有载的任何一种。

  • OCaml具有最简单的类型系统,尤其是如果你不要写的对象和函(其中许多加枫程序不,虽然它看起来疯了,我不写信函如果你写毫升)。Haskell的类型系统是雄心勃勃的和强大的,但是它不断得到改善,这意味着存在一些不一致的结果作为历史。F#基本上使用。净类系统,加ML-喜欢辛德雷-米尔纳多态性(参见问题 "什么是辛德雷-米诺".)

  • OCaml是不是很一致,是否它认为变式应当类型的静态或动态的类型,所以它提供了两个("代数数据类型"和"多态变体").所得的语言有很多的表达能力,这是伟大的专家,但其建造使用并不总是显而易见的业余。

  • OCaml的订的评价是正式定义,这是一个贫穷的设计选择的语言的副作用。更糟糕的是,实现方式是不一致:该bytecoded虚拟机使用一个秩序和机代码编译器使用。

其他提示

你应该了解F#或Haskell如果你知道OCaml?

我认为答案是肯定的是,最理想的是你应该了解所有三种语言,因为每个人提供的东西但F#是唯一一个有重大的未来,所以,如果你只能切实了解的一种语言,学习F#通过阅读我的 视觉F#2010年为技术计算的书 或订阅我们的 的F#.NET 杂志.

长寿

Microsoft致力于支持F#当他们发布了它的一部分Visual Studio2010年四月。所以F#是保证一个乐观的未来至少几年。有一个强有力的组合的实际上-重要的功能,像一个高性能机代码REPL,高级结构并行的内置。净4和生产质量IDE模式、F#是 前进的道路的任何其他功能的程序语言方面的真实世界的可适用性。坦率地说,没有人甚至是工作上的任何可能能够竞争F#在不久的将来。我自己打开来源 HLVM 项目是一个试图这样做,但它是从准备。

与此相反的是,这两个OCaml和Haskell正在开发在极非生产性的方向。这个已经被杀害OCaml几年来现在我希望Haskell遵循适合在今后几年。大多数前专业OCaml和Haskell程序员已经转移到F#(例如瑞士信贷银行,飞青蛙咨询公司)和多数其他无疑将迁移到更实际的替代方案,例如题和卡拉在最近的未来。

具体地说,OCaml的QPL许可证,防止任何人从固其日益增多的基本设计上的缺陷(16mb串和一系列的限制32-位机、不共享内存的并行性,没有价值类型参数通过多种类型删除,解释REPL、繁琐FFI等)。 因为他们必须分发衍生作品 在形成的增补程序的原件和软件包的维护者拒绝承认一个替代的上游。新的特点正在加入的语言,例如第一次级模块中OCaml3.12,都是没有价值的,因为核能力。

一些项目已开始在试图拯救OCaml但他们被证明是太少太晚。的 平行的GC 实际上是无用的和大卫*纳退出 包括电池 项目(虽然已经拿起和放在一个切下来的形式)。因此,OCaml已经从 最受欢迎的功能性语言在2007年 严重的下降在今天, 加枫清单业务量下降了50%,因为2007年.

Haskell具有较少的工业用户比OCaml,虽然它不会有多支持,它仍然是正在开发一个非常非生产性的方向。Haskell是发展几乎完全通过两个人在微软研究在剑桥(英国)。尽管事实上这纯粹是编程功能是坏性的设计,它们继续尝试开发解决方案的平行Haskell,旨在在多核当大量的不必要复制它会招致命的存储墙和摧毁任何希望的可扩展并行在多核.

唯一的主要用户的Haskell在工业是 伽罗瓦 约有30个完整时间,Haskell的程序员。我怀疑他们会让Haskell死完全,但这并不意味着他们将其发展成为一个更一般的-有用的语言。

实用性

我写了这篇文章你引用的关于哈希表。他们是一个良好的数据结构。其他人已经提到纯粹的功能的替代等三树木和帕特里夏*树木但这些通常-10倍低于哈希表在实践。原因很简单,就是缓存未支配性问题如今和树木产生额外O(日志n)指间接.

我个人喜好是可选的懒惰和可选择的纯度,因为一般都是有反作用在现实世界中(例如懒惰使得业绩和存储的消耗疯狂不可预测的和纯度严重下降的平均情况下的性能和使互操作性的一个噩梦).我是唯一一个人们的生活完全自编程功能,通过自己的公司。我只想说,如果我想Haskell是可行的,我会已经扩展到它多年前但我保持不来因为我不相信这是商业上可行的。

你说"我不喜欢被捆绑到一个庞大。净框架,除非利益都大"。好处是巨大的。你会得到生产质量IDE、生产质量JIT编译器,来执行非常有效的优化喜欢的类型-专业仿制药、生产质量的图书馆对于一切从GUI编程(见 游戏人生在32行的F#)以数字运算。但是,真正的好处。净,至少对我来说,是的,你可以出售的库你写F#和赚很多钱。没人曾经成功地销售库OCaml和Haskell程序(而我是其中一些人已经试图),但F#库已经卖出显着的数量。因此庞大。净框架是值得的,如果你想要赢得一个活生生的写作软件。

好的设计

这些语言的所有设计良好的但是对于不同的目的。OCaml是专门设计用于编写定理校准仪和Haskell是专门设计用于研究Haskell.F#目的是要解决所有的最严重的实际问题OCaml和Haskell,例如穷人的互操作性,缺乏并发垃圾收集和缺乏成熟的现代化图书馆等WPF,以便使一个有生产力的现代语言向一个大型的观众。

这不是你的一个标准的但你有没有考虑 工作提供?Haskell目前清单144个工作月实际上,Ocaml列表12和C#列26 000名.这些数字是不完美的但是我打赌你一旦F#船只不会很久之前它吹过去的Haskell和Ocaml数量的工作列表。

迄今为止每种编程语言,包括在视觉工作室拥有成千上万的工作列表。在我看来,如果你想要最好的机会利用的功能编程语言为你每天的工作,然后F#很快将它。

长寿

没有人能预测未来,但是

  • OCaml和Haskell已surving以及多年来,这预示着他们的未来
  • 当F#船舶与VS2010,MS将有法律义务,以支持它至少5年

实用性

Perf:我没有足够的第一手经验,Haskell,但是基于二手和第三方面的信息,我认为OCaml或F#都更加务实,在某种意义上说,我认为这是不可能,你将能够得到同样的运行时间perf在Haskell,你在OCaml的F#。

图书馆:容易访问。净框架是一个巨大的好处的F#。你可以把它看作是"绑到这个笨重的事情"如果你喜欢,但是不要忘记,"你有访问一个巨大的体积大图书馆通常非常有用的东西"。的'连接'。净是一个大卖点F#。F#是年轻并且如此具有较少的第三方图书馆,但已经有例如 独立, FParsec, , 和一群人,除了图书馆"在盒子"。网。

工具:我没有足够的个人经验进行比较,但我认为VS一体化F#优于任何东西,你会发现OCaml/Haskell今天(F#将继续提高有点在这里过下一年)。

改变:F#仍然是不断变化,因为它接近其第一个支持释放在VS2010,所以有一些重大更改的语言/图书馆,你可能不得不忍受在最近的未来。

好的设计

Haskell是绝对的美丽和一致。我不知道够不够OCaml但我的直觉是这是同样有吸引力。我认为,F#是'大于这些,它意味着更多的尘土飞扬的角落和不一致的地方(主要是因为调解的阻抗之间的不匹配FP。净额),但总体F#仍然感到"干净"我的,和不一致之处,确实存在,至少有良好的理由/意的.

整体

在我看来你会中的'良好的状态'知道任何的这三种语言。如果你知道一个很大的长期项目,你要用它为,一个可能脱颖而出,但我想很多的技能将可转让(更容易之间的F#和OCaml于向/从Haskell,但也更容易地之间的任何这三个比方说,Java)。

有没有简单的答案来回答这个问题,但是这里有一些要考虑的事项:

Haskell和OCaml都是成熟的语言有强烈的方式实现的。实际上,有很多好的实现Haskell,但我不认为这是一个主要观点在其有利于你的目的。

F#是年轻得多,以及谁可以预测哪里Microsoft将决定采取它?你感觉如何,更多地取决于你如何感觉关于Microsoft,比任何东西任何人都可以告诉你关于编程语言。

OCaml(或毫升在大),被一个较好的实用语言的选择,支持这样做很酷的功能性的东西没有强迫你工作的方式可能会不舒服。你得到了完整的利益之类的东西代数数据类型、模式匹配、类型推断,其他人一样喜欢的东西。哦,对象。

Haskell给你所有的(除了目的,很多),但也或多或少地迫使你重新考虑一切你认为你知道有关程序。这可能是一个非常好的事情,如果你想要学习新的东西,但它可能比你更想要咬断。我这样说是作为某人只是也许半路沿路径是一个高效、快乐Haskell的程序员。

两OCaml和Haskell正被用来编写的许多不同种类的程序,不仅仅是汇编者和艾或什么的。谷歌是你的朋友。

一个最后的注:OCaml给你hashtable,但这是不明智使用它的代码如果你真的想要拥抱功能的程序。持久性树(类的数据。Map)是真正正确的解决方案Haskell,并有很多不错的性质,这是一个很酷的东西要学习时你拿起Haskell.

F#和OCaml都非常相似的语法,不过,显然,F#是更好的。网。

哪一个学习或使用应依赖于其平台的目标。

在VS2010F#是要被包括在内,因为它编纂。净码,它可用于windows操作系统,支持。网的版本,你用它。这会给你一个大面积区域,但是有限的,目前的F#这OCaml没有的,在这F#出现未利用的所有的处理上一个机器,但是,这可能是由于F#仍在发展,这可能是一个功能并不重要,重要的。

还有其他的语言功能,例如厄兰,你可以看待,但是,基本上,如果你是坚强的,在一个FP语言,那么你应该可以拿起另一个相当迅速,因此,只需选择一个你喜欢的,并尝试开发有趣的和具有挑战性的应用。

最终语言作家将找到一个办法让OO语言工作,以及与多核心和FP可能下降到路边,但是,这并不出现会发生的很快。

这不是直接相关的运算的问题为是否或不学习,而是一例真正的世界OCaml使用在金融部门:http://ocaml.janestreet.com/?q=node/61

非常有趣的谈话。

在长寿,这是非常难判断的普及语言的,但只是在做一个快速检查在这里,正是这些数字的问题的标记的适当(功能性的)语言:-

2672斯卡拉 1936年Haskell, 第1674F# 1126题, 709方案, 332OCaml

我会说这是一个很好的迹象,这种语言的人们正在积极学习的时刻,因此可能是一个良好的指示哪些可能是受欢迎,在未来几年。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top