0

还有一个相关的问题:堆栈跟踪/类似的调试功能会是什么样子?

如果这是一个愚蠢的问题,请原谅我,但我对低级编程知之甚少。我知道大多数 CPU 都有与堆栈相关的指令,但是经过适当优化的无堆栈语言真的会慢得多吗?

4

1 回答 1

3

简短的回答:如果您的问题需要堆栈,那么语言/硬件内置的堆栈可能会比您编写的堆栈快很多。

让我们想想什么是“无堆栈语言

最初的 Fortran 语言没有堆栈的概念。你能写的只是一个大的 MAIN 程序。然后发现能够编写子例程并调用它们非常有用,因此添加了它以及返回值的函数。然而,正如我个人发现的那样,如果你让 MAIN 调用了一个子例程 A,然后它调用了 B,然后 B 会发现自己再次调用了 A,你猜怎么着?机器会“挂在返回循环中”,因为当 A 试图返回 MAIN 时,它会返回到 B,而 B 又会返回到 A,依此类推。它无法记住不止一件要返回的东西。

因此,对于某些问题,在那个 Fortran 中,如果不编写自己的堆栈,就无法解决问题。也就是说,您将拥有一个数组和一个整数变量,通过索引该数组来跟踪下一步要做什么,并且您最终会做一些后来被称为“push”和“pop”的事情。

这被发现非常有用,它被内置到后来的语言中。有多种方法可以做到这一点。在机器开始有内置堆栈之前,像 PL/1 这样的语言会有效地创建一个堆栈,其形式为不断分配和删除的激活记录的链表。(效率不是很高,但确实有效。)

所以如果你的语言没有堆栈,而你试图解决某些问题,你将不得不从活的语言中凿出你自己的堆栈,因为问题只是需要它。这种问题的一个例子是深度优先树行走。

所以如果你能做到这一点,语言是否“无堆栈”?

于 2012-04-09T00:49:34.173 回答