【发布时间】:2011-09-14 21:52:43
【问题描述】:
Smalltalk 对象thisContext 看起来很奇怪和奇妙。我无法理解它是什么以及它是如何工作的。甚至它是如何实现延续的。
对于 C 的调用堆栈,我可以轻松想象它是如何实现和工作的。但是对于这个……我不能。请帮助我理解它。
【问题讨论】:
标签: smalltalk callstack continuations stack-frame
Smalltalk 对象thisContext 看起来很奇怪和奇妙。我无法理解它是什么以及它是如何工作的。甚至它是如何实现延续的。
对于 C 的调用堆栈,我可以轻松想象它是如何实现和工作的。但是对于这个……我不能。请帮助我理解它。
【问题讨论】:
标签: smalltalk callstack continuations stack-frame
我认为这不是一个简单的问题。堆栈通过 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提问
【讨论】:
您可以在Smalltalk-80: The Language and its Implementation,第 26 章到第 30 章中找到最佳解释。堆栈帧(上下文)在第 580 页上进行了解释。
【讨论】:
更正确的说法是thisContext是一个延续——尤其是当前的延续。
想象一个变量c 在MethodContext 激活之前被设置为指向该上下文。那是thisContext。
【讨论】: