我正在阅读关于确定性执行的内容,这是指对于相同的输入,你会得到相同的输出。我在想是否有任何编译器编写者曾考虑过在运行时优化确定性函数。
例如,以阶乘函数为例。如果在运行时检测到它不断被调用具有相同的输入值,编译器可以缓存输出值,而不是执行阶乘函数,直接使用该输出值。看起来像一个不错的研究课题。是否有关于此主题的论文或研究?
我正在阅读关于确定性执行的内容,这是指对于相同的输入,你会得到相同的输出。我在想是否有任何编译器编写者曾考虑过在运行时优化确定性函数。
例如,以阶乘函数为例。如果在运行时检测到它不断被调用具有相同的输入值,编译器可以缓存输出值,而不是执行阶乘函数,直接使用该输出值。看起来像一个不错的研究课题。是否有关于此主题的论文或研究?
这是可以做到的,但据我所知,编译器通常不会这样做。问题在于用户可以定义任意数量的类型和任何方式的相等性,并且使用堆分配等内容非常困难来证明这种情况。基本上,只有当您的函数涉及直接数值计算时才能完成,这是很少见的,因此通常价值不高。
你在谈论引用透明性。这是函数式编程的重要组成部分。
http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)
http://blogs.msdn.com/b/vcblog/archive/2008/11/12/pogo.aspx讲述了基于剖面的优化。
虽然没有直接回答你的问题,但是一般来说它讨论了使用运行时行为来优化汇编代码。