Haskell vs JVM performance [已关闭]

2022-09-01 03:16:23

我想为网站编写一个后端系统(它将是一个自定义搜索样式的服务)。它需要高度并发和快速。鉴于我对并发性的愿望,我计划使用一种函数式语言,如Haskell或Scala。

但是,速度也是重中之重。http://benchmarksgame.alioth.debian.org 结果似乎表明Java几乎和C/C++一样快,但Scala通常相当不错,但对于大多数任务来说,Haskell的范围从慢到慢得多。

有没有人有任何使用Haskell vs Scala vs Java执行高度并发任务的性能基准/经验?

我看到的一些网站表明Scala存在内存泄漏,这对于像这样的长期运行的服务来说可能是可怕的。

我应该用什么来编写我的服务,或者在选择之前应该考虑什么(性能和并发性是最高优先级)?

谢谢


答案 1

这个问题表面上是关于用GHC编译的代码的性能与在JVM上运行的代码的性能。但还有很多其他因素在起作用。

  • 是否有一个团队在做这件事,或者只是你?
    • 该团队对这些语言的熟悉程度/舒适度如何?
    • 这是你们(所有人)想要投入时间学习的语言吗?
  • 谁来维护它?

行为

  • 这个项目预计会持续多久?
  • 什么时候(如果有的话)停机时间是可以接受的?
  • 这个程序会做什么样的处理?
    • 有没有知名的图书馆可以帮助你做到这一点?
    • 你愿意滚动自己的图书馆吗?用这种语言来说,这有多难?

社区

  • 你打算从开源中汲取多少?
  • 你打算为开源做多少贡献?
  • 社区是多么生动和乐于助人
    • 在 StackOverflow 上
    • 在 irc 上
    • 在Reddit上
    • 处理您可能使用的开源组件

工具

  • 您需要一个 IDE 吗?
  • 是否需要代码分析?
  • 您想做什么样的测试?
  • 语言文档的帮助有多大?对于您将要使用的库?
  • 有没有工具可以满足你甚至不知道自己拥有的需求?

您应该考虑一百万个其他因素。无论你选择Scala、Java还是Haskell,我几乎可以保证你能够满足你的性能要求(也就是说,在任何这些语言中,它可能需要大致相同的智能量来满足你的性能要求)。众所周知,Haskell社区很有帮助,我在Scala社区的有限经验与Haskell非常相似。就我个人而言,与至少具有一流功能的语言相比,我开始发现Java相当讨厌。此外,还有更多的Java程序员,导致互联网上关于Java的信息激增,无论是更好的(更有可能你需要知道的都在那里)还是更糟(大量的噪音要筛选)。

tl;博士我很确定性能大致相同。考虑其他标准。


答案 2

你应该选择你最熟悉的语言,并且该语言对你试图完成的事情有最好的库支持(请注意,Scala可以使用Java库)。Haskell很可能足以满足您的需求,如果您学习了足够的知识来有效地使用它,Scala也是如此。如果你对语言不是很了解,那么编写高性能代码可能很困难。

我的观察是,在Scala中可以比Haskell编写速度更快更紧凑的高性能并行代码。但是,您不能只使用任何一种语言中最明显想到的内容,并期望它能够快速发展。

Scala不再有与执行组件相关的内存泄漏,除非您在CPU有限的情况下使用默认执行组件,因此消息的创建速度比使用它们的速度快,或者您忘记处理所有消息。这是一个设计选择,而不是一个错误,但对于某些类型的容错应用程序来说,这可能是错误的设计选择。Akka 通过使用不同的 actor 实现来克服这些问题。


推荐