Thanks for the explanation. With this in mind, I'm wondering about two specific cases and how you intend to solve them (these are are ones that gave me the biggest headache):
First of all, how will you avoid doing a clone() on every update using indexed assignment? You need some way to know whether or not an instance have to be cloned or can be modified in-place.
A related case is normal left-arrow assignment. It is not desirable to do a clone() on every assignment either. You want to basically do a "deferred clone" (i.e. CoW) so that the instances can be shared in both variables until one of them is updated.
When I was thinking about this, I couldn't get away from concluding that a full CoW implementation is needed in order to avoid all unnecessary cloning.
Regards,
Elias