Version française
Home     About     Download     Resources     Contact us    
Browse thread
Difference between ocamlc and ocamlopt when marshalling reference
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Mathias Kende <mathias.kende@e...>
Subject: Difference between ocamlc and ocamlopt when marshalling reference
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