什么是超级编译?

时间:2012-01-30 16:53:07

标签: haskell compilation

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

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

2 个答案:

答案 0 :(得分:47)

超级编译可以作为部分评估的概括来处理。部分评估背后的想法是程序的许多部分可以在编译时进行评估,因此应该如此。超级编译扩展了这一点,评估了在编译时无法完成的事情,比如将map f (map g xs)转换为map (f . g) xs,除了map的定义之外没有任何东西(至少我认为我得到了)部分评估权 - 我只读了很多关于超级编译的内容。

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

Max Bolingbroke有很多关于这个主题的有用论文 - 我推荐第一篇,Supercompilation by Evaluation作为介绍。第2节通过示例介绍了这个主题,其余部分虽然有点难以理解,但对于该过程非常有用。 Neil Mitchell也有number of good presentations描述它。

我希望有所帮助。

答案 1 :(得分:2)

来自Wikipedia on Metacompilation

  

元编译是一种涉及元系统转换的计算   (MST)从计算机M到控制的metamachine M',   分析和模仿基于M. Semantics的程序的工作   转换,例如部分评估和超级编译(SCP),   是metacomputation。

有关Metasystems on Wikipedia的更多信息。

我对这个问题并不了解,但我会理解这个描述。假设我们有一个简单的程序可以将stdin复制到stdout。这将是我们的计算机M.我们的metamachine M'是第二个程序,它将M的来源作为输入(或以其他方式构造为固有地知道M),因此不仅能够理解M的作用,而且能够理解如何这样做。

如果我的理解是正确的,那么显而易见的问题是为什么我们关心M'?我想到的是自动优化。如果我们能够理解M的工作方式和M想要完成的工作,M'可以解决在空间或时间上改善M的操作的方法。此外,重要的是,M'可以替代M,因为M'可以完成M所做的任何事情。这意味着M''可以改进M'优化M的方式,并随后取代M',等等。