为什么编译器无法自动优化常规递归?

问题描述 投票:0回答:1

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

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

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

我不是这样对badmouth编译工程师说的,我只是真的不知道这些东西是如何运作的,但是我很乐意学习。

compiler-construction programming-languages theory compiler-theory
1个回答
0
投票

首先,不能和目前没有区别

由于你的建议不是技术上难以理解的,那不会完成,或者在你的一生中不会完成,看来它们实际上可能是

他们为什么不这样做的隐含问题是猜测,但可能是基于在有或没有优化的情况下保证相同结果需要多少资源

我不会错过导致错误的优化级别存在很大不确定性的日子,所以我很乐意等待它直到完美

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

© www.soinside.com 2019 - 2024. All rights reserved.