[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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.