"Richard O'Keefe" <rao...@gmail.com> writes:

> Well, when you talk about "THE copying machinery" you have to be a bit more
> specific.  There is no such thing as #deepCopy or #shallowCopy in the ANSI
> Smalltalk standard.  Many Smalltalks have

I am referring only to Pharo, which is the only Smalltalk I have ever
used.

> You will note that in Pharo, AtomicCollection, Behavior, Boolean,
> Character, Float, SmallFloat64, Form, ColorForm, Morph, Paragraph,
> Point, SmallInteger, String, UndefinedObject, and perhaps others
> override #deepCopy.

Interesting. I didn't even consider this possibility because the comment
in Object>>#deepCopy says "should never be overridden".

> #deepCopy is *serious* "Hic sunt dracones" territory.
> It's marked on the Hunt-Lenox Globe, just beside the
> Vesuvian introitus ad infernum.

:-)  That's more or less what I discovered in my recent debugging
experiment.

> Seriously, the OOP way to do this is
> MyClass>>immutableSnapshot
>   "Answer an immutable copy of myself."
>   ...
> and then whatever it takes to make precisely that happen.

In other words, implement my own variant of deepCopy. That's probably
the safest way to go, but it also means there is no extensible
copying infrastructure that everybody can build on.

Konrad.

Reply via email to