我正在阅读有关确定性执行的信息,对于相同的输入,您具有相同的输出。我想知道是否有任何编译器编写者考虑过在运行时优化确定性函数。 例如,采用阶乘函数。如果在运行时检测到连续使用相同的输入值调用它,则编译器可以缓存输出值而不是执行阶乘函数,可以直接使用该输出值。看起来像一个很好的研究课题。是否有关于这个主题的论文或工作?
答案 0 :(得分:4)
这通常称为memoization,在函数式语言中是一种相当常见的优化。
答案 1 :(得分:1)
可以这样做,但据我所知,编译器不常见。麻烦的是,用户可以以他们喜欢的任何方式定义尽可能多的类型和相等,并且使用堆分配和东西来证明这样的事情是非常非常困难的。基本上,它可以完成,但前提是你的函数涉及直接的数值计算,这是罕见的,因此它通常没有很高的价值。
答案 2 :(得分:1)
你在谈论参考透明度。它是功能编程的重要组成部分。
http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)
答案 3 :(得分:1)
http://blogs.msdn.com/b/vcblog/archive/2008/11/12/pogo.aspx讨论了配置文件引导优化。
本身并不回答您的问题,但总体上讨论了使用运行时行为来优化程序集