为什么编译器不能自动优化常规递归?

时间:2019-03-20 14:41:55

标签: compiler-construction programming-languages theory compiler-theory

几乎在每个函数式编程教程中,都有很大一部分专门用于教您如何将算法转换为尾递归格式,因为可以将其优化为循环。

这很好,但是让我想知道为什么编译器不能使用“常规”递归自动转换算法以使用单独的堆栈对象(分配在堆上),然后将算法转换为迭代对象。

我不完全了解CHICKEN Scheme或Haskell编译器的工作方式(我听说这可能不受堆栈溢出的影响),但是也许他们在做这样的事情?如果是这样,为什么不能在大多数语言中做到这一点?

我并不是要对Badmouth编译器工程师说这句话,我只是真的不知道这些东西是如何工作的,而是愿意学习。

1 个答案:

答案 0 :(得分:0)

首先,不能与当前不存在

由于您的建议并不是严格意义上的建议,在您的一生中都不会完成,或者可能不会完成,因此看来他们实际上可以做到

为什么不进行隐含的问题是推测,而是可能基于需要多少资源才能保证在没有优化的情况下获得相同的结果

我不会错过优化水平存在不确定性而导致出现错误的日子,因此我很乐意等到完美为止

据我所知,标准中没有任何内容可以排除此优化