Pharo 中的赋值是如何实现的?

How is assignment implemented in Pharo?

浏览图片并搜索“:=”不会产生任何相关结果,但会迅速弹出。

Pharo 图像中的确切位置以及如何实施分配?

赋值被翻译成字节码指令。对临时变量的赋值转换为 popIntoTemp:,它将当前顶部弹出堆栈并将其存储在分配给由索引(指令的参数)描述的临时变量的槽中。

其他赋值以类似的方式工作,因此对实例变量的赋值转换为 popIntoRcvr: ("pop into receiver"),其中索引(指令的参数)指定实例的索引变量。

Class变量赋值转换为popIntoLit:(这里指令的参数是文字本身,即本例中的class变量),class实例popIntoRcvr: 的变量赋值和 popIntoLit: 的全局赋值(参数是文字本身,即全局)。

用于指令的名称取自 Pharo 中的字节代码视图。 The Blue Book 根据字节(当然是虚拟机使用的字节)和描述性名称来定义这些指令。以下是与上述指令相关的字节:

  • popIntoTemp::<68>
  • popIntoRcvr:: <60>
  • popIntoLit:: <82 C0>

另请注意,可能会有针对特殊情况的额外说明,例如以某个较大的偏移量存储到临时变量中。