Haskell ghc运行时对评测的支持是如何实现的?
我在评论中没有找到太多的文档。这方面有什么好的博文或类似的文章吗?你可能会发现琼斯、马洛和辛格的文章很有用,这取决于你想完成什么。它包括在并行环境中评测GHC程序的实践,并包含一些您可能会发现有用的案例研究。评测框架的最佳信息来源可能仍然是Patrick Sansom和Simon Peyton Jones的。更多细节可以在Sansom以及添加正式规范中找到。Simon Marlow还谈到了GHC状态更新中最近的一些变化 成本中心分析背后的思想是用“成本中心”节点注释表达式树,因此,例如,使用Haskell ghc运行时对评测的支持是如何实现的?,haskell,profiling,ghc,Haskell,Profiling,Ghc,我在评论中没有找到太多的文档。这方面有什么好的博文或类似的文章吗?你可能会发现琼斯、马洛和辛格的文章很有用,这取决于你想完成什么。它包括在并行环境中评测GHC程序的实践,并包含一些您可能会发现有用的案例研究。评测框架的最佳信息来源可能仍然是Patrick Sansom和Simon Peyton Jones的。更多细节可以在Sansom以及添加正式规范中找到。Simon Marlow还谈到了GHC状态更新中最近的一些变化 成本中心分析背后的思想是用“成本中心”节点注释表达式树,因此,例如,使用-a
-auto-all
程序将具有如下注释:
fib n = {-# SCC foo #-} (case n of
0 -> 0
1 -> 1
n -> fib (n-1) + fib (n-2))
在运行时,当输入fib
时,程序将查看当前的“成本中心堆栈”,并在顶部添加“foo”。一旦评估再次退出SCC注释的范围,这将被逆转。有一点魔力可以确保,如果,比如说,n
恰好是一个延迟值,并且程序需要执行它的代码,那么在必要的地方,适合该代码的成本中心就会恢复
然后,此基础结构将用于时间和空间分析:
根据经验,不应指望在SCC注释中发生任何代码转换。如果有疑问,最好在调用堆栈中对足够高的函数进行注释,这样性能关键位就根本不会被注释。在一次相对徒劳的谷歌搜索之后,恐怕GHC HQ正忙于实现和改进它,以至于无法在博客上对其进行描述。我认为大部分仍然与本文中描述的差不多。你有什么特别感兴趣的吗?谢谢你的推荐!这应该是一个答案。我认为rwh提到一些优化与评测不兼容