Browse thread
Difference between ocamlc and ocamlopt when marshalling reference
-
Mathias Kende
- Fabrice Le Fessant
[
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: | Fabrice Le Fessant <fabrice.le_fessant@i...> |
| Subject: | Re: [Caml-list] Difference between ocamlc and ocamlopt when marshalling reference |
Hi, The main difference is that "p" is a closure in bytecode, but just a pointer in native code: in bytecode, "p" references "r", and so a closure is needed; in native code, the reference to "r" in "p" is a direct access to the module structure, and so "p" does not need to keep a reference to "r". So, when you marshal "p" in bytecode, you follow the closure and the reference, that are stored in "s", and they are duplicated when "s" is unmarshalled. I think Marshal.Closures is only expected for hacking anyway, so you should not really assume anything on its behavior ;-) --Fabrice Mathias Kende wrote, On 06/02/2010 02:16 PM: > Hi, > > I found a difference on the way global references used inside a function > are handled with respect to marshalling between ocamlc and ocamlopt. > > See the exemple below : > > -------------- a.ml --------------- > let r = ref 0 > let p () = Printf.printf "%d\n" !r > let s = Marshal.to_string p [Marshal.Closures] > let () = r := 1 > let q : unit -> unit = Marshal.from_string s 0 > let () = q () > ----------------------------------- > $ ocamlc a.ml > $ ./a.out > 0 > $ ocamlopt a.ml > $ ./a.out > 1 > ----------------------------------- > > I am not sure which semantic is the "good" one. They are both > interesting, but having only one is definitely simpler. > > Is this a known problem ? is there fundamental reasons in the compilers > for which it can not be changed ? > > Cheers, > > Mathias > > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > -- Fabrice LE FESSANT Chercheur, Equipe ASAP (As Scalable As Possible) http://www.lefessant.net/ INRIA-Futurs, Bat P - 112 Parc Orsay Université 2-4, rue Jacques Monod F-91893 Orsay Cedex, FRANCE