我认为Haskell是一门优美的语言,从基准测试来看,其实现可以生成快速代码。

但是,我想知道这是否适合于长期运行的应用程序,或者追逐所有可能在懒惰的应用程序中忽略的潜在的延迟导致的泄漏,是否令人沮丧?

This Reddit comment回应了我的担忧:



(整个讨论似乎很有见地和坦率)

我个人对高性能计算感兴趣,但是我想服务器和HPC有共同的要求。

如果Haskell适用于此类应用程序,是否有任何示例证明了这一点,即

  • 需要运行几天或几周,因此需要消除所有相关的泄漏(程序花费在睡眠或等待某些底层C库返回的时间显然不计在内)
  • 是不平凡的(如果应用程序很简单,则开发人员可以猜测泄漏的源头并尝试各种修复。但是,我认为这种方法不能很好地扩展。堆概要文件在识别泄漏源方面的帮助)根据上面的Reddit讨论,具有多个[相互]递归函数的泄漏似乎特别令人担忧。

    如果Haskell不适合此类应用程序,那为什么呢?

    更新:作为示例提出的Haskell的Yesod Web服务器框架may have issues with memory。我想知道是否有人连续服务了几天后测试了它的内存使用情况。

    最佳答案

    “空间泄漏”在语义上与任何语言的任何其他种类的资源使用问题相同。在严格的语言中,GC倾向于分配和保留过多的数据(因为结构严格)。

    无论您使用哪种语言进行“老化”以查找一段时间内的资源使用情况,Haskell都一样。

    参见例如xmonad,一次运行数月或数年。这是一个Haskell应用程序,只使用了很少的堆,我通过运行数周或数月并进行性能分析来分析堆模式来对其进行了测试。这使我确信资源使用是稳定的。

    最终,懒惰在这里是一条红鲱 fish 。使用资源监视工具和测试来衡量和验证您的资源期望。

    关于performance - Haskell是否适合长时间运行的应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30470013/

  • 10-10 13:53
    查看更多