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