Version française
Home     About     Download     Resources     Contact us    
Browse thread
Re: Oo.copy
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Andrew Conway <arc@w...>
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.