答案 0 :(得分:1)
您评估
thisContext contextStack
这里,thisContext
实际上是一个指向当前活动堆栈帧的特殊变量。然后,contextStack
返回一个包含整个堆栈的数组。
答案 1 :(得分:1)
嗯,实际上,问题就是简单:thisContext
可能是一个非常昂贵的操作,与消息发送相比。
在Visualworks Smalltalk中,堆栈访问 extermly 昂贵,因为它使用本机C-stack,因此对thisContext
的任何访问都必须将整个C-Stack重新整合到因果连接中 Smalltalk对象。也就是说,对于每个C堆栈帧,将创建Smalltalk对象(包括可能的JIT去优化),此外,对这些对象的所有更改必须反映回C堆栈。
在Pharo(和Squeak,就此而言)它不那么尴尬,因为它使用Smalltalk对象作为堆栈。但是仍然会在每次调用时刷新缓存堆栈帧的对象池。 (是的,除了例如在Java中,汇集对象确实提高了Squeak的性能......欢迎回到90年代:)