还有一个相关的问题:堆栈跟踪/类似的调试功能将如何显示在其中?
如果这是一个愚蠢的问题,请原谅我,但我对低级编程知之甚少。我知道大多数CPU都有与堆栈相关的指令,但正确优化的无堆栈语言真的会慢得多吗?
答案 0 :(得分:3)
简短回答:如果你的问题需要一个堆栈,那么内置于语言/硬件中的问题可能比你写的那个更快。
让我们想一想“无堆叠语言”会 。
原始的Fortran语言没有堆栈的概念。所有你能写的都是一个大MAIN程序。 然后发现能够编写子程序并调用它们非常有用,因此添加了返回值的函数。 但是,正如我个人发现的,你有MAIN调用一个子程序A,然后调用B,然后B会发现自己再次调用A,猜怎么着? 机器将“挂在一个返回循环中”,因为当A试图返回MAIN时,它将返回B,它将返回A,依此类推。 它无法回忆起不止一件事。
因此,对于某些问题,在Fortran中,如果不编写自己的堆栈,就无法解决问题。 也就是说,你将有一个数组和一个整数变量,通过索引到该数组来跟踪下一步该做什么, 你最终会做一些事情,后来被称为“推”和“流行”。
这被发现非常有用,它被内置于以后的语言中。 有各种方法可以做到这一点。 在机器开始具有内置堆栈之前,诸如PL / 1之类的语言将有效地创建堆栈,其形式为不断分配和删除的激活记录的链接列表。 (效率不高,但有效。)
因此,如果您的语言没有堆叠,并且您尝试解决某些问题,则必须使用生活语言凿出自己的堆栈,因为问题只需要它。 这种问题的一个例子是深度优先树步行。
所以,如果你能做到这一点,语言是否“无堆叠”?