我听说某些语言不支持尾调用优化 (TCO) 的一个原因是,如果/当调试需要查看堆栈跟踪时,这种优化是以混淆调用堆栈为代价的。(我听说过其他原因,例如“虚拟机不支持它”,但我们暂时先不管Java。)
似乎在某些情况下,在某些语言中 TCO 是可能的,但在不执行 TCO 的情况下,堆栈帧的唯一目的是维护元数据,以便生成任何最终的堆栈跟踪。即,堆栈帧可以是最小的,只包含足够的信息来生成堆栈跟踪。
问题:最小化此类堆栈帧的大小是否没有意义?它不会最小化堆栈空间的使用,从而在空间耗尽之前允许更深层次的递归吗?是否在这种思想适用的语言中进行了尝试?(我特别想到了 Python。)或者这对于节省的实际空间来说是一种失败的努力?(我想生成漂亮的堆栈跟踪所需的元数据实际上与堆栈帧中的正常数据相比要多得多。)
简而言之:最小化堆栈帧的大小作为 TCO 的替代方案。
PS。我的想法不是基于任何实际的基准。我可能会离开这里。