Re: Oo.copy

Andrew Conway (arc@wildtype.Stanford.EDU)
Tue, 28 May 1996 11:43:39 -0700 (PDT)

Date: Tue, 28 May 1996 11:43:39 -0700 (PDT)
From: Andrew Conway <arc@wildtype.Stanford.EDU>
Message-Id: <199605281843.LAA10975@wildtype.Stanford.EDU>
To: 100060.2106@compuserve.com, garrigue@kurims.kyoto-u.ac.jp
Subject: Re: Oo.copy

>From: Jacques GARRIGUE <garrigue@kurims.kyoto-u.ac.jp>
>
>>>>>> ESPERET PHILIPPE <100060.2106@compuserve.com> writes:
>
> > I cannot understand how to access a fresh copy of an object with
> > O'Caml (Oo seems normally to copy only pointers). Thank you if someone
> > can explain me how to get such a copy (please see below for an example).
>
> > [ gives example of a class where a mutable element of the class
> > (an array) is not copied by OO.copy ]
>
>The problem is that your array is shared between the two copies.
>There are various specific ways to solve it.

I think that is a bad feature. I realise it may be unavoidable.

In particular, when I read the documentation for OO.copy, I assumed
that it was a function that descended the data structure, copying
all mutable structures. This seemed like a very useful thing to me
(and I wish it was available for any given type, not just classes).

I can immagine that this is impractical due to the overhead involved
in building specific "deep" copy functions for each data type defined
(that could possibly contain a mutable data structure), unless the
GC information contains enough of a specification to write a general
copy function similar to the general comparison functions. This would perhaps
only take one bit per block...saying whether the particular block
is mutable or not. On the other hand, I do realise that bits are expensive.

>One is to add an "unsharing" method in the virtual class, which is
>applied after copying.

Ugh!

> ...
>
>This is difficult to have a general way, since mutable data structures
>can get various forms.

Agreed.

Andrew.