On Tue, Jul 18, 2017 at 4:46 PM, Levente Uzonyi leves@caesar.elte.hu wrote:
On Tue, 18 Jul 2017, Bert Freudenberg wrote:
I don't know how the VM handles immutability in this case, but it's
possible that it wouldn't let #become*: affect immutable objects.
I think that would be fine, you should be able to become an immutable object and vice versa.
On the other hand, I'm sure it would let you change fields of
immutable objects via #become*:, but that's not an issue in your case.
This is debatable ... I would rather have the VM raise an error when trying to become a field of an immutable object. Immutable should mean immutable, no?
#become: would become slow again if we had to find all objects referencing the one we're about to swap. Or, we'd have to make the whole object graph immutable when we make an object immutable. In that case #become: could just fail when the receiver or the argument is immutable.
+1 for making the whole object graph be immutable. And "mutableObj becomeForward: immutableObj copyHash: false" should be the only allowed become case.
- Bert -
- Bert -