【问题标题】:Do any computer languages not use a stack? [closed]是否有任何计算机语言不使用堆栈? [关闭]
【发布时间】:2015-02-01 22:07:13
【问题描述】:

是否有任何计算机语言不使用堆栈数据结构来跟踪执行进度?

或者使用这种数据结构是大多数计算机语言或图灵机固有的东西所产生的紧急需求?

【问题讨论】:

  • 请告诉我如何改进问题以避免关闭。
  • 你写“这是通用的吗?”是什么意思?你可以说得更详细点吗?也许这个问题与programmers.stackexchange.com 更相关

标签: data-structures programming-languages


【解决方案1】:

使用传统的“C 风格”堆栈,某些语言特性难以或不可能实现。例如,闭包不能用传统的堆栈轻松实现,因为闭包需要一个指向旧激活记录的指针才能正常工作,并且该内存会在 C 风格的堆栈中自动回收。再举一个例子,生成器和协程需要自己的内存来存储局部变量和相对偏移信息,因此如果您使用标准堆栈实现,则不容易实现。

希望这会有所帮助!

【讨论】:

  • JavaScript 实现了闭​​包,但保留了一个堆栈数据结构来记录激活记录。仅仅是堆栈的 LIFO 行为正是计算机语言所需要的,而 LIFO 定义了堆栈吗?
  • @BenAston 堆栈之所以起作用,是因为普通函数调用和返回的工作方式是只有当前函数处于活动状态,调用函数会挂起该函数并激活一个新函数,然后从function 完全结束函数调用的内存并暴露最近调用的函数。这正是你从堆栈中得到的行为。我上面给出的例子表明,这些约束不一定要成立,所以你不能总是在 C 风格的模型中使用堆栈。
猜你喜欢
  • 2013-11-05
  • 2011-03-03
  • 2011-03-12
  • 2017-02-20
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
相关资源
最近更新 更多