Haskell在类似游戏软实时应用中的GC性能如何?

24

我意识到游戏规则逻辑应该处理巨大的复杂性,因此考虑在游戏领域中使用非典型语言作为游戏逻辑脚本语言。游戏脚本的原因是用更少的代码表示复杂的逻辑。所以需要一种极其抽象的语言。

但是,大多数很好抽象化的语言都使用GC。通常,GC会导致CPU爆发负载。基本上它会延迟清除内存操作,并一次性完成。这对实时图形包括游戏和GUI非常关键。

据我所知,Haskell的GC与其他基于GC的语言略有不同,因为它具有不变属性。这很难想象。我找不到任何详细的文档。

有什么不同吗?对于长时间运行的程序来说,它是否没有CPU爆发负载?(随时间分布良好,可以为每个tick调用手动完成GC命令)


请参见https://dev59.com/-nM_5IYBdhLWcg3wt1c0。 - Don Stewart
3个回答

6

2
链接应该是http://www.haskell.org/pipermail/haskell-cafe/2010-February/073881.html - pipemail在视觉上标记特定的线程方面做得不好。 - 9000
谢谢。这次交流对于获得乐观的看法很有帮助。然而,我感觉缺乏批准的数据...可能仍然没有可验证的应用程序。 - eonil
总的来说,还有一些希望的空间,但目前我们离具备实时能力的垃圾回收器还很远。 - Alp Mestanogullari
但至少它支持并行处理。;-) - J D

4

你可能对商业Haskell游戏Nikki and the Robots感兴趣,该游戏由Joyride Labs于2011年发布。

enter image description here

他们似乎没有任何问题使用垃圾收集器。

4
你可能会对Simon Marlow的这篇博客文章感兴趣,其中讲述了将GHC从停止-全局垃圾回收转移到更具并发性且适用于软实时应用程序(如游戏)的暂停时间更合适的东西。
我自己没有对GHC的延迟情况进行基准测试,但据我了解,那些0.0007毫秒的暂停时间可能看起来很小,但它们与堆大小成比例,而那个玩具井字棋程序的堆非常小,因此真正的堆和暂停时间将是数量级更大。

谢谢。我决定制作一个消耗大量内存的试验程序 :) - eonil
那个练习的结果是什么? - Engineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接