On 31/03/2010 19:21, Dmitry Bely wrote:
On Thu, Sep 3, 2009 at 1:44 PM, Xavier Leroy<xavier.le...@inria.fr>  wrote:
(...)
But, I thought that float ref's were automatically unboxed by the compiler
when they didn't escape the local context.

Yes, if all uses of the float ref are unboxed, which is the case in
your code.

let max_val (a:float array) =
   let m = ref min_float in
   for i = 0 to (Array.length a) - 1 do
     if a.(i)>  !m
     then m := a.(i)
   done;
   !m

!m is not unboxed (Ocaml 3.11). Should it?

As far as I can tell, the boxing for the reference cell is removed by the compiler (that is, the reference is implemented as a mutable local variable), but not the boxing for the float contained in the reference. Since a is a float array, it is needed to box the float before putting it in the reference, hence the allocation.


-- Alain


_______________________________________________
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

Reply via email to