Go中的尾部调用优化

dxh*_*dxh 32 tail-recursion go tail-call-optimization

到目前为止,Go编程语言是否优化尾调用?如果没有,它是否至少优化了函数的尾递归调用?

Ros*_*nko 15

你可以通过互联网找到的所有东西,"Go支持在某些情况下的可用递归",并在邮件列表中告知:

对于某些情况,它已经存在于6g/8g中,而在gccgo中则更为普遍.

我们目前不打算更改语言以要求编译器在所有情况下都实现尾调用优化.如果必须进行尾调用,则使用循环或goto语句.

为了得到这些案例,你最好深入研究golang源码,这是开源的.

  • 您不能将所有尾调用替换为循环或gotos。 (2认同)

小智 6

我刚刚编写了一个新库来处理这个限制。感谢 Go 1.18 附带的新泛型语言功能。现在,类型安全的无堆栈相互递归函数是可能的。

https://github.com/kandu/go_tailcall

  • 引用您自己的内容时,请务必阅读 [Stack Overflow 的自我推销政策](https://stackoverflow.com/help/promotion)。 (2认同)

Jer*_*all 3

它不是。根据邮件列表上的核心开发团队的说法,也没有任何计划。