什么是超级编译?

简短而甜美:我看到有几位消息人士在谈论“超级编译”。 但是我还没有在互联网的任何地方find一个单一的文件来描述这是什么 。 据推测,因为它似乎很简单,谁也不值得解释。

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

超级汇编可以作为部分评估的推广。 部分评估背后的想法是,一个程序的许多部分可以在编译时进行评估,应该是这样。 超级编译扩展了这一点,评估在编译时无法完成的事情,比如将map f (map g xs)转换成map (f . g) xs除了map的定义之外没有任何东西(至less我认为我得到了部分评估的权利 – 我只读了很多超级编译)。

另一种看待它的方式是将许多其他优化结合在一起,例如砍伐森林,专业化和内联。 通过performance就好像它已经知道函数和评估的input一样,它可以得到一个更直接的计算结果的方法 – 它可以通过看看它们将如何使用或者可以插入所有可能的值来摆脱中间数据结构,然后将结果包装在一个case ,或者用其假装值来做其他事情。

Max Bolingbroke在这个问题上有许多有用的论文 – 我推荐第一个评估超级编译作为介绍。 第二部分通过实例介绍了这个主题,其他部分则通过一些难以理解的方式介绍了这个过程。 尼尔·米切尔也有一些很好的介绍它的描述。

我希望有帮助。

维基百科上的Metacompilation :

Metacompilation是一种计算,它涉及到从计算机器M到元数据M'的元系统转换(MTS),它控制,分析和模仿M的工作。基于语义的程序转换,例如部分评估和超级编译(SCP),是元计算。

有关Metasystems的更多信息, 请访问Wikipedia 。

我对这个问题不了解,但是我会理解这个描述。 说我们有一个简单的程序,可以复制标准input到标准输出。 这将是我们的计算机M.我们的元机器M'是第二个程序,它把M的来源作为input(或者以其他方式被构造为固有地知道M),因此不仅能够理解M所做的事情,而且能够理解它这样做。

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