最佳答案
GHC有很多可以执行的优化,但我不知道它们都是什么,也不知道它们在什么情况下执行的可能性有多大。
我的问题是:我可以期望它每次或几乎每次应用什么转换?如果我看到一段将被频繁执行(求值)的代码,我的第一个想法是“嗯,也许我应该优化它”,在这种情况下,我的第二个想法应该是“想都别想,GHC得到了这个”?
我是在ABC_0_阅读这篇论文的,他们使用的将列表处理重写为不同形式的技术对我来说是新奇的,GHC的正常优化将可靠地优化为简单的循环。我如何判断我自己的程序是否有资格进行这种优化?
在GHC手册中有一些信息,但它只回答了问题的一部分。
编辑:我开始赏金。我想要的是一个较低级别的转换列表,如lambda/let/case-floating、类型/构造函数/函数参数专门化、严格性分析和拆箱、工人/包装器,以及我遗漏的任何其他重要的GHC功能,以及输入和输出代码的解释和示例,以及当总效果大于其部分总和时的理想情况说明。并且理想地,当转换不会的发生时,会有一些提及。我并不期望每个转换都有新颖的解释,几句话和内联的一行代码示例就足够了(或者一个链接,如果它不是20页的科学论文),只要在它结束时大画面是清晰的。我希望能够看到一段代码,并能够很好地猜测它是否会编译成一个紧密循环,或者为什么不,或者我必须更改什么才能使它。(在这里,我对像Stream Fusion这样的大型优化框架不太感兴趣(我刚刚读了一篇关于它的论文);更多的是写这些框架的人所拥有的知识。)