如何在 Squeak 中弱引用单个对象
How to weakly reference a single object in Squeak
Squeak Smalltalk 支持弱引用集合,但似乎缺少 Java 的 WeakReference class 的直接等效项,它支持对单个对象实例的弱引用。
如果我用多个实例变量定义一个 class 对象,我想将其中一个作为弱引用,那么最惯用的方法是什么?实例化一个 WeakArray 来保存单个引用是否有意义,或者是否有我不知道的更简单的方法?
在撰写本文时,对于 标准 Squeak 图像,没有直接的方法让 class 的一个实例变量变弱而其他实例变量保持不变强的。但是,当前的 VM,例如 CogVM are equipped with Ephemerons, a concept similar, if not more powerful than simple weak references. To my knowledge, the upcoming SPUR Squeak 图像,默认情况下将具有 Ephemerons。
也就是说,您已经可以在 Squeak 中尝试 an older implementation of Ephemerons。
使用 WeakArray。
Squeak VM 仅将弱引用实现为索引变量,而实例变量始终是强引用。这就是为什么使用单元素 WeakArray 是正确的做法。
您可以实现自己的单元素 WeakReference class,但它不会比 WeakArray 更有效。
Squeak Smalltalk 支持弱引用集合,但似乎缺少 Java 的 WeakReference class 的直接等效项,它支持对单个对象实例的弱引用。 如果我用多个实例变量定义一个 class 对象,我想将其中一个作为弱引用,那么最惯用的方法是什么?实例化一个 WeakArray 来保存单个引用是否有意义,或者是否有我不知道的更简单的方法?
在撰写本文时,对于 标准 Squeak 图像,没有直接的方法让 class 的一个实例变量变弱而其他实例变量保持不变强的。但是,当前的 VM,例如 CogVM are equipped with Ephemerons, a concept similar, if not more powerful than simple weak references. To my knowledge, the upcoming SPUR Squeak 图像,默认情况下将具有 Ephemerons。
也就是说,您已经可以在 Squeak 中尝试 an older implementation of Ephemerons。
使用 WeakArray。
Squeak VM 仅将弱引用实现为索引变量,而实例变量始终是强引用。这就是为什么使用单元素 WeakArray 是正确的做法。
您可以实现自己的单元素 WeakReference class,但它不会比 WeakArray 更有效。