没有栈还有函数吗?
Will there be functions if there were no stacks?
我知道堆栈数据结构用于存储局部变量以及正在执行的函数的许多其他内容 运行。
我也了解如何使用堆栈来优雅地管理递归。
假设有一台机器没有在内存中提供堆栈区域,我认为不会有支持递归的机器的编程语言。我也想知道机器的编程语言是否支持没有递归的函数。
拜托,有人帮我看看这个。
需要一些理论框架来理解递归确实根本不依赖于函数,而是依赖于表现力。
我不会深入研究,让 Google 填补任何空白。
是的,我们可以有没有堆栈的函数。
我们甚至不需要 call/ret 函数机制,我们可以让编译器内联每个函数调用。
所以根本不需要栈
这只考虑了编程意义上的函数,而不是数学意义上的函数。
一个更好的名字是例程。
无论如何,这只是概念的简单证明,其功能旨在作为可重用代码,不需要堆栈。
然而,并不是所有的函数,在数学意义上,都可以这样实现。
这类似于说:"We can have dogs on the bed but not all dogs can be on the bed".
引用递归是正确的,但是当谈到递归时,我们需要更加正式,因为 recursion.
有多种形式
例如,如果被内联的函数没有以某种方式受到约束,则内联每个函数调用都可能使编译器循环。
在不深入研究理论的情况下,为了始终确保我们的编译器不会循环,我们只能允许 primitive (bounded) recursion.
你说的"recursion"大概意思是general recursion,不能通过内联实现,我们可以证明GR需要无限量的内存,这就是两者之间的分界线PR 和 GR,没有堆栈。
因此我们可以拥有没有堆栈的函数,甚至是递归(对于某种形式的递归)函数。
如果您的问题更实际,那么请考虑 MIPS。
MIPS ISA中没有堆栈指令或堆栈指针寄存器,与堆栈相关的一切都只是约定俗成。
编译器可以使用任何内存区域并将其视为堆栈。
我知道堆栈数据结构用于存储局部变量以及正在执行的函数的许多其他内容 运行。
我也了解如何使用堆栈来优雅地管理递归。
假设有一台机器没有在内存中提供堆栈区域,我认为不会有支持递归的机器的编程语言。我也想知道机器的编程语言是否支持没有递归的函数。
拜托,有人帮我看看这个。
需要一些理论框架来理解递归确实根本不依赖于函数,而是依赖于表现力。
我不会深入研究,让 Google 填补任何空白。
是的,我们可以有没有堆栈的函数。
我们甚至不需要 call/ret 函数机制,我们可以让编译器内联每个函数调用。 所以根本不需要栈
这只考虑了编程意义上的函数,而不是数学意义上的函数。
一个更好的名字是例程。
无论如何,这只是概念的简单证明,其功能旨在作为可重用代码,不需要堆栈。
然而,并不是所有的函数,在数学意义上,都可以这样实现。
这类似于说:"We can have dogs on the bed but not all dogs can be on the bed".
引用递归是正确的,但是当谈到递归时,我们需要更加正式,因为 recursion.
有多种形式例如,如果被内联的函数没有以某种方式受到约束,则内联每个函数调用都可能使编译器循环。 在不深入研究理论的情况下,为了始终确保我们的编译器不会循环,我们只能允许 primitive (bounded) recursion.
你说的"recursion"大概意思是general recursion,不能通过内联实现,我们可以证明GR需要无限量的内存,这就是两者之间的分界线PR 和 GR,没有堆栈。
因此我们可以拥有没有堆栈的函数,甚至是递归(对于某种形式的递归)函数。
如果您的问题更实际,那么请考虑 MIPS。
MIPS ISA中没有堆栈指令或堆栈指针寄存器,与堆栈相关的一切都只是约定俗成。
编译器可以使用任何内存区域并将其视为堆栈。