3

我正在阅读有关确定性执行的内容,即对于相同的输入,您具有相同的输出。我想知道是否有编译器编写者考虑过在运行时优化确定性函数。例如,采用阶乘函数。如果在运行时,检测到它被连续调用相同的输入值,编译器可以缓存输出值,而不是执行阶乘函数,可以直接使用该输出值。似乎是一个不错的研究课题。有没有关于这个主题的论文或工作?

4

4 回答 4

4

这通常称为memoization,是函数式语言中相当常见的优化。

于 2011-05-26T22:51:56.120 回答
1

它可以做到,但据我所知,编译器并不常见。问题在于,用户可以定义任意数量的类型,并以他们喜欢的任何方式定义相等性,而对于堆分配和其他东西,要证明这样的事情非常非常困难。基本上,它可以完成,但前提是你的函数涉及直接数值计算,这很少见,因此它通常没有很高的价值。

于 2011-05-26T21:56:57.720 回答
1

你在谈论参考透明度。它是函数式编程的重要组成部分。

http://en.wikipedia.org/wiki/Referential_transparency_(computer_science )

于 2011-05-26T21:57:11.440 回答
1

http://blogs.msdn.com/b/vcblog/archive/2008/11/12/pogo.aspx谈论配置文件引导优化。

本身不回答您的问题,但一般谈论使用运行时行为来优化装配

于 2011-05-26T22:00:55.990 回答