Optimization 关于GHC实施的好的介绍性文本?
在Haskell中编程时(尤其是在解决Project Euler问题时,次优的解决方案往往会强调CPU或内存需求),我经常感到困惑,为什么程序的行为会如此。我看了一下配置文件,试图引入一些严格性,选择了另一种数据结构。。。但主要是在黑暗中摸索,因为我缺乏良好的直觉 另外,虽然我知道Lisp、Prolog和命令式语言通常是如何实现的,但我不知道如何实现惰性语言。我也有点好奇 因此,我想更多地了解从程序源到执行模型的整个链 我想知道的事情:Optimization 关于GHC实施的好的介绍性文本?,optimization,compiler-construction,haskell,ghc,heap-memory,Optimization,Compiler Construction,Haskell,Ghc,Heap Memory,在Haskell中编程时(尤其是在解决Project Euler问题时,次优的解决方案往往会强调CPU或内存需求),我经常感到困惑,为什么程序的行为会如此。我看了一下配置文件,试图引入一些严格性,选择了另一种数据结构。。。但主要是在黑暗中摸索,因为我缺乏良好的直觉 另外,虽然我知道Lisp、Prolog和命令式语言通常是如何实现的,但我不知道如何实现惰性语言。我也有点好奇 因此,我想更多地了解从程序源到执行模型的整个链 我想知道的事情: 应用了哪些典型的优化 当有多个候选项进行评估时,执行顺序
- 应用了哪些典型的优化
- 当有多个候选项进行评估时,执行顺序是什么(虽然我知道它是由所需的输出驱动的,但在先评估A然后评估B,或者先评估B以检测您根本不需要A之间,可能仍然存在很大的性能差异)
- thunks是如何代表的
- 如何使用堆栈和堆
- 什么是咖啡馆?(分析表明有时热点在那里,但我没有线索)
- -系列文章中的第一篇文章
- -我还没读过,但由于GC通常代表Haskell所做工作的一个很好的门户,所以它应该提供一些见解
- -我相信你一定听说过,但这太好了,不能不链接到。可以在一些地方进行枯燥的阅读,但这是理解哈斯克尔的本质的最好方法之一,至少是我读过的部分
- -比名称所暗示的更具技术性,并对Haskell的设计以及设计背后的决策提供了一些非常有趣的观点。在阅读Haskell的实现之后,您会情不自禁地更好地理解它
- 内联线李>
- β降低李>
- 死码消除李>
- 条件转换:案例案例,案例删除
- 拆箱李>
- 构建产品退货李>
- 完全惰性转化李>
- 专业化李>
- Eta扩展李>
- Lambda提升李>
- 严格性分析
- 静态变元变换李>
- 构建/foldr或流融合李>
- 共同子表达消除李>
- 构造函数专门化
- (装箱)在全局堆上分配对象李>
- 每个,由与堆对象具有相同布局的帧组成李>
- 在进行函数调用时,将值推送到堆栈上并跳转到函数李>
- 如果代码需要分配(例如构造函数),则该数据将放置在堆上
参考文献和进一步阅读: