编译器友好的尾递归 + 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 真正闪光的地方!
检查函数是否已在 ATS 中进行尾调用优化的最佳方法是什么? (目前为止我一直运行"top"看内存占用是否恒定)
作为后续行动:假设您有一个复杂的尾递归函数,编译器没有通过 TCO,有没有办法以对编译器更友好的方式重写它?或者以这样的方式强制编译器尝试TCO?
在 ATS2 中有一种特殊的方法。
假设你有
fnx foo(...) = bar(...)
and bar(...) = ...bar...
如果 bar 的主体包含对 bar 的 non-tail-recursive 调用,则 C 编译器将报错并显示错误消息。
当涉及(线性)流时,事情变得更具挑战性。一个看似 non-tail-recursive 的函数可以 运行 而无需担心堆栈溢出,因为它本质上是将其堆栈保存在堆上(然后释放它):这是 ATS 真正闪光的地方!