编译器友好的尾递归 + ATS 中的尾递归检查

Compiler Friendly Tail Recursion + Tail Recursion Checking in ATS

检查函数是否已在 ATS 中进行尾调用优化的最佳方法是什么? (目前为止我一直运行"top"看内存占用是否恒定)

作为后续行动:假设您有一个复杂的尾递归函数,编译器没有通过 TCO,有没有办法以对编译器更友好的方式重写它?或者以这样的方式强制编译器尝试TCO?

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

假设你有

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

如果 bar 的主体包含对 bar 的 non-tail-recursive 调用,则 C 编译器将报错并显示错误消息。

当涉及(线性)流时,事情变得更具挑战性。一个看似 non-tail-recursive 的函数可以 运行 而无需担心堆栈溢出,因为它本质上是将其堆栈保存在堆上(然后释放它):这是 ATS 真正闪光的地方!