2009-11-20 56 views
1

在Pharo中,我如何找到当前评估的堆栈?如何找到当前的堆栈?

+0

fyi,如果你问一个非常简单的问题,一分钟后一个非常简单的答案。 – geowa4 2009-11-20 14:10:02

+1

这是谷歌查询无法找到的东西... – nes1983 2009-11-20 14:28:39

回答

1

那么,事实上,这个问题很简单:thisContext可能是一个相当昂贵的操作,而不像消息发送。

在Smalltalk中VisualWorks中,栈接入是extermly昂贵,因为它使用的天然C-栈,从而thisContext任何访问都必须具体化整个C堆栈成因果关系 Smalltalk的对象。也就是说,对于每个C堆栈帧,要创建一个Smalltalk对象(包括可能的JIT去最优化),并且对这些对象的所有更改都必须反射回C堆栈。

在Pharo(和Squeak,对于这个问题)它不那么笨拙,因为它使用Smalltalk对象作为堆栈。但每次调用时仍然会缓存堆栈帧的对象池。 (是的,除了例如在Java中,池化对象确实提高了Squeak中的性能...欢迎回到90年代:)

1

您评估

thisContext contextStack 

这里,thisContext真的是指向当前活动的堆栈帧的特殊变量。然后,contextStack返回一个包含整个堆栈的数组。

+0

接下来是什么?我如何给我的电脑供电?你按下电源按钮。 – Geo 2009-11-20 13:28:23

+0

所以太简单了​​...好吧,好吧... – nes1983 2009-11-20 14:29:21

相关问题