【问题标题】:How does Smalltalk manipulate call stack frames (thisContext)?Smalltalk 如何操作调用堆栈帧(thisContext)?
【发布时间】:2011-09-14 21:52:43
【问题描述】:

Smalltalk 对象thisContext 看起来很奇怪和奇妙。我无法理解它是什么以及它是如何工作的。甚至它是如何实现延续的。

对于 C 的调用堆栈,我可以轻松想象它是如何实现和工作的。但是对于这个……我不能。请帮助我理解它。

【问题讨论】:

    标签: smalltalk callstack continuations stack-frame


    【解决方案1】:

    我认为这不是一个简单的问题。堆栈通过 MethodContext 的实例在图像中具体化。一个 MethodContext 可以有一个发送者,它是另一个 MethodContext。那个可以有另一个……生成一个完整的堆栈。 MethodContext 在执行 CompiledMethod 时由 VM 实例化(也在语言中具体化)。

    MethodContext 如何映射到 C 堆栈,这取决于 VM。 StackVM(CogVM 位于 StackVM 之上)正是一个更好地映射 MethodContext 和 C 堆栈的 VM。

    除了卢卡斯说的蓝皮书,查一下

    http://www.mirandabanda.org/cogblog/查看左边的帖子...

    我建议你在http://lists.squeakfoundation.org/mailman/listinfo/vm-dev提问

    【讨论】:

    • 感谢您的回答。目前,蓝皮书对我说了很多话:)
    【解决方案2】:

    您可以在Smalltalk-80: The Language and its Implementation,第 26 章到第 30 章中找到最佳解释。堆栈帧(上下文)在第 580 页上进行了解释。

    【讨论】:

      【解决方案3】:

      更正确的说法是thisContext一个延续——尤其是当前的延续。

      想象一个变量cMethodContext 激活之前被设置为指向该上下文。那是thisContext

      【讨论】:

      • 感谢您的回答。这对我来说很难,因为我还不能完全理解延续本身的实现......
      猜你喜欢
      • 1970-01-01
      • 2016-06-25
      • 2023-03-05
      • 2011-07-02
      • 2014-06-30
      • 2021-12-06
      • 2011-06-17
      • 2012-04-06
      • 1970-01-01
      相关资源
      最近更新 更多