2nd*_*ife 41 ocaml haskell programming-languages scala clojure
在阅读了很多关于FP的并发执行和性能优势的博客和帖子后,我最近开始研究FP.我对FP的需求在很大程度上受到我正在开发的应用程序的影响.我的应用程序是一个基于状态的数据注入到另一个子系统,其中时间非常关键(接近每秒200万个事务).我有几个这样的子系统需要测试.我正在认真考虑使用FP来实现其并行性,并希望采用正确的方法,SO上的许多帖子都谈到了Scala,Haskell和Clojure wrt语言结构,库和JVM支持的缺点和优点.从语言的角度来看,我可以学习任何语言,只要它能帮助我实现结果.
某些帖子支持Haskell进行模式匹配和语言简单,基于JVM的FP lang在使用现有Java库方面具有很大的优势.JaneStreet是OCAML的重要支持者,但我真的不确定OCAML的开发者支持和帮助论坛.
如果有人处理过这么大的数据,请分享您的经验.
Rex*_*err 51
你想快点还是想要容易?
如果你想要快速,你应该使用C++,即使你使用FP原则来帮助正确.由于时序至关重要,因此对软(和硬,如果需要)实时编程的支持将非常重要.您可以确切地确定如何以及何时有时间恢复内存,并且只花费您在该任务上花费的时间.
你所说的三种语言都比近似最优手动调整的C++慢〜2-3倍,然而只有在相当传统的命令式方式中使用时.它们都使用垃圾收集,这将在您的交易中引入不受控制的随机延迟.
现在,也就是说,使用C++以防弹方式运行是很多工作.应用FP原则需要更多的样板(即使在C++ 11中),并且大多数库默认是可变的.(编辑:Rust正在成为一个很好的选择,但是足够详细地描述Rust是超出了这个答案的范围.)
也许你没有时间,可以负担得起缩减其他规格.例如,如果它不是时间而是吞吐量是至关重要的,那么你可能希望Scala胜过Clojure(参见计算机语言基准测试游戏,Scala在撰写本文时赢得了每个基准测试,并且几乎在所有情况下都具有较低的代码大小(编辑: CLBG在这方面没有任何帮助,尽管你可能会在Web Archive上找到支持这些陈述的档案)); 应该选择OCaml和Haskell用于其他原因(类似的基准测试分数,但它们具有不同的语法和互操作性等).
至于哪个系统具有最佳的并发支持,Haskell,Clojure和Scala都很好,而OCaml有点缺乏.
这几乎把它缩小到Haskell和Scala.你需要使用Java库吗?斯卡拉.你需要使用C库吗?可能是哈斯克尔.你不需要吗?然后你可以根据你喜欢的风格选择,而不必过分担心你选择错误的生活会让你的生活变得更加艰难.
mik*_*era 27
我用Clojure做到了这一点,由于以下原因证明它非常有效:
我不能说很多其他语言的经验,但我对Haskell和Scala的一些实际经验的印象是:
总的来说,我认为你可以对这些中的任何一个感到满意.它可能归结为您关心JVM以及您对类型系统的看法.