为什么编译器无法自动优化常规递归?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么编译器无法自动优化常规递归?相关的知识,希望对你有一定的参考价值。
在几乎所有函数式编程教程中,大部分专门用于教您如何将算法转换为尾递归格式,因为这可以优化为循环。
这很好,但它让我想知道为什么编译器不能使用“常规”递归自动转换算法以使用单独的堆栈对象(在堆上分配),然后将算法转换为迭代的算法。
我不完全理解CHICKEN Scheme或Haskell编译器是如何工作的(我听说它可能不受堆栈溢出的影响),但也许它们正在做这样的事情?如果是这样,为什么不能在大多数语言中完成?
我不是这样对badmouth编译工程师说的,我只是真的不知道这些东西是如何运作的,但是我很乐意学习。
答案
首先,不能和目前没有区别
由于你的建议不是技术上难以理解的,那不会完成,或者在你的一生中不会完成,看来它们实际上可能是
他们为什么不这样做的隐含问题是猜测,但可能是基于在有或没有优化的情况下保证相同结果需要多少资源
我不会错过导致错误的优化级别存在很大不确定性的日子,所以我很乐意等待它直到完美
据我所知,标准中没有任何内容可以排除这种优化
以上是关于为什么编译器无法自动优化常规递归?的主要内容,如果未能解决你的问题,请参考以下文章