F#性能vs Erlang性能,是否证明Erlang的VM更快?


19

我一直在花时间学习函数式编程,现在我想开始编写项目,而不只是涉猎教程/示例。

在进行研究时,我发现Erlang在编写并发软件方面似乎非常强大(这是我的目标),但是用于开发的资源和工具并不像Microsoft开发产品那样成熟。

F#可以在Linux(Mono)上运行,因此可以满足要求,但是在Internet上四处寻找时,我找不到F#与Erlang的任何比较。现在,我倾向于Erlang只是因为它似乎拥有最多的压力,但是我很好奇两个系统之间是否确实存在性能差异。

由于我习惯于在.NET中进行开发,因此使用F#的速度可能比使用Erlang快很多,但是我找不到任何资源可以说服F#与Erlang一样可伸缩。

我对仿真最感兴趣,它将把大量快速处理的消息发送到持久节点。

如果我的要求做得不好,请要求更多验证。


12
语言没有速度。在特定输入上运行特定程序的特定语言实现(取决于程序,可能包括整个外部世界)具有一定的速度。

1
F#在.NET运行时上运行,而Erlang在其自己的VM上运行。与其领域中的语言(如Scala)相比,Erlang的过程被认为是轻量级的。对于模拟生成节点并传递大量消息的情况,.NET / Mono运行时是否与Erlang的VM一样好,还是Erlang的VM更好?
afuzzyllama 2011年

3
@delnan:语言确实具有性能特征。
乔恩·哈罗普

2
@JonHarrop怎么样?编程语言仅仅是一些语法和相关的语义。

1
@delnan:语义学限制了优化。例如,动态类型化的语言在实践中难以优化。JVM上缺少值类型会导致堆分配比.NET多得多,因此,GC承受的压力更大。像代码生成器一样,垃圾收集器可以并且确实利用诸如不变性之类的信息来提高性能。编程语言的设计对此具有巨大的影响。
乔恩·哈罗普

Answers:


21

您所说的“可行”是什么意思?“拥有最多的压力”不一定是选择一种语言的最佳方法。

Erlang声名claim起是其大规模并行化的能力。这就是为什么它在爱立信电话交换机中常用的原因。Erlang是软实时的,因此您可以对此做出一定的性能保证。

F#受益于.NET Jitter的优化功能。此外,该语言本身被设计为一种高性能的功能性语言(它是OCaml的一种变体,由于其速度而广泛用于金融行业)。

最终,除非您计划同时运行数百万个微型代理(这是Erlang所优化的),否则F#应该可以完成任务。

本页说明了适用于Erlang的用例。


“可行”是指可扩展。我知道拥有新闻并不意味着该语言必定会更好,但似乎Erlang已经得到了证明(至少爱立信已得到证明)。代理商是什么意思?流程?
afuzzyllama 2011年

1
是。事实证明,Erlang可同时处理爱立信交换机上的许多电话。您必须弄清楚您的用例是否相似。我认为这是一个相对专业的用例;如果您的应用程序中没有此特性,那么使用Erlang不会带来任何好处,并且Erlang页面实际上描述了一些适合使用Erlang的用例。
罗伯特·哈维

2
代理人,演员,这是一种功能性语言讨论中的设计概念。我很惊讶您还没有遇到它。en.wikipedia.org/wiki/Agent-based_model
Patrick Hughes

换句话说,您是否需要Erlang提供的大规模(现在或最终)可扩展性?大多数程序没有。
罗伯特·哈维

1
F#也具有代理模型-使用稍微隐晦地命名的'MailboxProcessor',它与Erlang中的事物相同。我不能评论每个相对性能特征。
FinnNk 2011年

7

由于这两种语言的性能在很大程度上取决于应用程序和编程风格,因此几乎没有关于该主题的客观陈述。

我唯一能给出的建议是F#具有静态类型系统的性能优势,而CLR利用此功能可以很好地改善性能。F#确实具有异步代理和消息传递功能,但尚未进行优化,并且同步代码的速度通常快10倍以上。

Erlang是动态类型的,因此在性能方面处于明显劣势(预计会有更多装箱操作),但是它是从头开始构建的,以支持异步代理之间的快速消息传递,因此它可能比等效的F#快得多。 。但是,我没有基准测试结果可以支持:这只是我的期望。

顺便说一句,Erlang和F#都是相对较小的语言,具有较小的社区,并且由于目标市场不同,因此对它们熟悉的人很少。我唯一想到的几乎合格的人是杰斯珀·路易斯·安徒生Jesper Louis Andersen),但我不确定他做了多少F#。


4

您应该阅读Joe Armstrong 撰写的这篇文章:http : //erlang.org/pipermail/erlang-questions/2012-February/064277.html

简短的是,Erlang并非设计得很快!在许多情况下,它的速度相当快,但这仅次于容错性和稳定性。

事实是,Erlang和F#都是不错的语言,虽然我只看了F#,但我写了一本书关于Erlang:用Erlang构建Web应用程序,我可以说这是一种有趣的语言。

我还要指出,在接下来的6到9个月中,功能语言书籍似乎正在蓬勃发展。我知道至少有4个关于Erlang(包括我的),一个关于Haskell,以及关于OCaml,Clojure和F#的标题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.