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>
另请注意,可能会有针对特殊情况的额外说明,例如以某个较大的偏移量存储到临时变量中。
浏览图片并搜索“:=”不会产生任何相关结果,但会迅速弹出。
Pharo 图像中的确切位置以及如何实施分配?
赋值被翻译成字节码指令。对临时变量的赋值转换为 popIntoTemp:
,它将当前顶部弹出堆栈并将其存储在分配给由索引(指令的参数)描述的临时变量的槽中。
其他赋值以类似的方式工作,因此对实例变量的赋值转换为 popIntoRcvr:
("pop into receiver"),其中索引(指令的参数)指定实例的索引变量。
Class变量赋值转换为popIntoLit:
(这里指令的参数是文字本身,即本例中的class变量),class实例popIntoRcvr:
的变量赋值和 popIntoLit:
的全局赋值(参数是文字本身,即全局)。
用于指令的名称取自 Pharo 中的字节代码视图。 The Blue Book 根据字节(当然是虚拟机使用的字节)和描述性名称来定义这些指令。以下是与上述指令相关的字节:
popIntoTemp:
:<68>popIntoRcvr:
: <60>popIntoLit:
: <82 C0>
另请注意,可能会有针对特殊情况的额外说明,例如以某个较大的偏移量存储到临时变量中。