Squeak Smalltalk tiene soporte para colecciones de referencias débiles, pero parece carecer de un equivalente directo a la clase WeakReference de Java que admite una referencia débil a una sola instancia de objeto. Si estoy definiendo una clase de objeto con varias variables de instancia, una de las cuales quiero que sea una referencia débil, ¿cuál es la forma más idiomática de hacer esto? ¿Tiene sentido crear una instancia de WeakArray para contener esa única referencia, o hay una forma más simple de la que no estoy al tanto?

3
dhm 27 ene. 2015 a las 20:25

2 respuestas

La mejor respuesta

Utilice un WeakArray.

La máquina virtual Squeak implementa referencias débiles solo como variables indexadas, mientras que las variables de instancia siempre están fuertemente referenciadas. Es por eso que usar un WeakArray de un elemento es lo correcto.

Puede implementar su propia clase WeakReference de un elemento, pero no sería más eficiente que un WeakArray.

4
Vanessa Freudenberg 27 ene. 2015 a las 22:02

En el momento de escribir este artículo, con una imagen Squeak estándar , no hay una forma directa de que una variable de instancia de una clase sea débil mientras que las demás se mantienen fuertes. Sin embargo, las VM actuales, como CogVM, están equipadas con Ephemerons, un concepto similar, si no más poderoso, que las simples referencias débiles. Que yo sepa, la próxima imagen de SPUR Squeak tendrá Ephemerons de forma predeterminada.

Dicho esto, puede probar una implementación anterior de Ephemerons en Squeak ya.

2
Tobias 27 ene. 2015 a las 20:50