检查功能是否已在ATS中进行尾调用优化的最佳方法是什么? (到目前为止,我一直在运行“ top”以查看内存使用情况是否恒定)

后续操作:假设您有一个复杂的尾递归函数,编译器未能达到TCO,是否有办法以更友好的编译器方式重写它?还是以这种方式迫使编译器尝试TCO?

最佳答案

在ATS2中有一种特殊的方法。

说你有

fnx foo(...) = bar(...)
and bar(...) = ...bar...


如果bar的主体包含对bar的非尾递归调用,则
C编译器将抱怨一条错误消息。

当涉及(线性)流时,事情变得更具挑战性。一个看似非尾递归的函数可以运行而无需担心堆栈溢出,因为它实际上将其堆栈保存在堆上(然后释放它):这是ATS真正发挥作用的地方!

09-11 18:48