English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
The sharing mechanism in the Marshal module
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2007-03-04 (14:38)
From: Zheng Li <li@p...>
Subject: Re: The sharing mechanism in the Marshal module


Deokhwan Kim <dk@ropas.snu.ac.kr> writes:
> I thought the following code would produce 2 in (* 1 *), but as it is it
> outputs 1:
That's the semantic of marshal, it serialize functional values as *closures*,
i.e. functions carrying its whole environments.  In your example, the incr1
also gets a copy of incr's environment, which has a copy of c included.

Despite some flaws being spotted in the marshal module last month [1], as far
as your example goes, you should stick with the closure semantics.

> Why? In addtion, what should I do if I really want the sharing of the c
> counter between incr and incr1?

There are some workarounds, but it depends on why you need marshaling. In
many cases, you don't actually need marshal for a shallow copy.

[1] http://caml.inria.fr/pub/ml-archives/caml-list/2007/02/84333195e90a8f13ac9fea7fb6a706bf.en.html

Zheng Li