【发布时间】:2016-09-04 21:47:33
【问题描述】:
我知道一切都是对象,而您在 Smalltalk 中向对象发送消息以完成几乎所有事情。
现在我们如何实现一个对象(内存表示和基本操作)来表示原始数据类型?比如整数的+是如何实现的?
我查看了 Smalltalk 的源代码,并在 Smallint.st 中找到了它。有人能解释一下这段代码吗?
+ arg [
"Sum the receiver and arg and answer another Number"
<category: 'built ins'>
<primitive: VMpr_SmallInteger_plus>
^self generality == arg generality
ifFalse: [self retrySumCoercing: arg]
ifTrue: [(LargeInteger fromInteger: self) + (LargeInteger fromInteger: arg)]
]
【问题讨论】:
-
Smalltalk 原始方法和原始类必须在语言之外(或者我应该说下面)实现。看到
<primitive: VMpr_SmallInteger_plus>?这是一个线索。搜索VMpr_SmallInteger_plus的任何实现的non-Smalltalk 代码。 (如果您提供指向您正在浏览的代码的链接,我可能会比这更有帮助。) -
那么这里的
primitive是什么意思?这是关键字吗? -
如@zwol所说,由于源码在github上,可以用github.com/gnu-smalltalk/smalltalk/…搜索