什么是超级编译?

Mat*_*hid 69 haskell compilation

简短而甜蜜:我见过几个谈论"超级编译"的消息来源.但是,我还没有在互联网的任何地方找到一个单独的文件来描述这是什么.大概是因为对于那些甚至不值得解释的人来说似乎很简单.

有人知道这究竟是什么吗?

ger*_*ter 47

超级编译可以作为部分评估的概括来处理.部分评估背后的想法是程序的许多部分可以在编译时进行评估,因此应该如此.Supercompilation扩展了这个,评估的事情,不能在编译时完全熟透,以及像转向map f (map g xs)map (f . g) xs没有任何东西,除了定义map(至少我认为我得到了偏右的评价-我只读过很多关于supercompilation).

另一种看待它的方法是结合许多其他优化,例如砍伐森林,专业化和内联.通过表现好像它已经知道函数和评估的输入,它可以得到更直接的计算结果的方法 - 它可以通过查看它们将如何被使用或它可以插入所有可能的值来摆脱中间数据结构然后将结果包装在a中case,或者使用其伪装值执行其他操作.

Max Bolingbroke有很多关于这个主题的有用论文 - 我推荐第一篇,评估超级编译,作为介绍.第2节通过示例介绍了这个主题,其余部分虽然有点难以理解,但是对于该过程非常有用.Neil Mitchell也有很多很好的演讲报道.

我希望有所帮助.

  • 我没有区分超级编译和部分评估."超级编译扩展了这一点,评估了在编译时无法完成的事情," - 这也描述了部分评估.部分评估程序通常会留下部分评估的剩余程序.理想情况下,部分评估应充分利用所有静态已知的输入/参数来部分评估程序. (2认同)