gpt4 book ai didi

smalltalk - statement do in a method declaration? 是什么意思

转载 作者:行者123 更新时间:2023-12-03 16:20:53 25 4
gpt4 key购买 nike

这是asciiValue Character 的方法类(class):

asciiValue
<primitive: 171>
^ self primitiveFailed
asciiValue 被发送到一个字符对象,例如 $A,并返回它的 ascii 代码。谁能解释一下 asciiValue方法工作?那在哪里 <primitive: 171>来自哪里,它的目的是什么?

最佳答案

这是一种原始方法而不是常规 Smalltalk 方法的原因是 Characters在 Pharo 中是直接对象。
当在内存中看到时,对象是具有标题和一些附加字段的数据结构,每个实例变量一个。这些插槽包含指向当前绑定(bind)到 ivars 的对象的指针。
SmallIntegers 的情况下,然而,这个结构在传统上被简化了,因为对象的 ivar 是 SmallInteger不指向小整数对象,它有 SmallInteger .这就是为什么SmallIntegers被称为直接对象:你没有指向它们,你拥有它们。
当然,要实现立即值,您需要一种在内存中区分它们的方法。 SmallIntegers是整数,但内存指针也是整数。建立区别的技巧是观察所有对象都分配在 4(32 位)或 8(64 位)的倍数的地址中。这意味着指针的两个低位总是等于 0。因此,您可以使用这些备用位来标记立即对象并将立即值存储在剩余的较高位中。
在 Pharo 和其他方言的情况下,Characters其代码点适合一个字节,可以很容易地标记,因此它们变得立即。这就是为什么Characters (和 SmallIntegers )没有 ivars:它们是它们所代表的值,加上一些虚拟机标签来区分。
因此,Smalltalk 图像无法访问 ASCII Character 的数值。 ,并且需要让虚拟机读取它。这就是为什么 Pharo 需要一个原语来回答 #asciiValue信息。
有关 Smalltalk 中原语的更多信息,请查看 Smalltalk: How primitives are implemented? .

关于smalltalk - <primitive : xyz> statement do in a method declaration? 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62765475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com