私はすべてがオブジェクトであることを知っており、ほとんどすべてを行うためにSmalltalkのオブジェクトにメッセージを送信します。 プリミティブデータ型を表すオブジェクト(メモリ表現と基本操作)をどのように実装できますか?たとえば、整数の場合、+
はどのように実装されていますか?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)]
]
上記のコードのリンクです:https://github.com/gnu-smalltalk/smalltalk/blob/62dab58e5231909c7286f1e61e26c9f503b2b3df/kernel/SmallInt.st
Smalltalkのプリミティブメソッドとプリミティブクラスは、言語の外側に実装する必要があります(または、おそらく_below_)。 ''を参照してください。それは手掛かりです。どのような実装であれ、* VMRP_SmallInteger_plusの* Smalltalk *でないコードを検索してください。 (あなたが閲覧しているコードへのリンクを提供すれば、それ以上に役立つかもしれません。) –
zwol
ここで「プリミティブ」とは何を意味していますか?それはキーワードですか? – mahdix
@zwolによれば、ソースはgithub上にあるので、https:// githubで検索することができます。com/gnu-smalltalk/smalltalk/search?utf8 =%E2%9C%93&q = VMpr_SmallInteger_plus –