caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] OCaml not automatically specialising a polymorphic function
@ 2003-06-25 15:05 Richard Jones
  2003-06-25 15:36 ` Xavier Leroy
  0 siblings, 1 reply; 2+ messages in thread
From: Richard Jones @ 2003-06-25 15:05 UTC (permalink / raw)
  To: caml-list

- max3.ml ------------------------------------------------------------
let max a b =
  if a > b then a else b
in

print_int (max 2 3);;
----------------------------------------------------------------------

Looking at the assembler, OCaml doesn't work out that "max" has type
max : int -> int -> int, and so it generates very inefficient
code. This is a bit surprising because (I think) max can't be called
from outside the module, and the one place where it is called
specifies the type.

So I'm guessing here that OCaml doesn't really optimize across
functions?

Rich.

-- 
Richard Jones. http://www.annexia.org/ http://freshmeat.net/users/rwmj
Merjis Ltd. http://www.merjis.com/ - all your business data are belong to you.
"I wish more software used text based configuration files!"
 -- A Windows NT user, quoted on Slashdot.

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Caml-list] OCaml not automatically specialising a polymorphic function
  2003-06-25 15:05 [Caml-list] OCaml not automatically specialising a polymorphic function Richard Jones
@ 2003-06-25 15:36 ` Xavier Leroy
  0 siblings, 0 replies; 2+ messages in thread
From: Xavier Leroy @ 2003-06-25 15:36 UTC (permalink / raw)
  To: Richard Jones; +Cc: caml-list

> - max3.ml ------------------------------------------------------------
> let max a b =
>   if a > b then a else b
> in
> 
> print_int (max 2 3);;
> ----------------------------------------------------------------------
> 
> Looking at the assembler, OCaml doesn't work out that "max" has type
> max : int -> int -> int

Yes, because it has type 'a -> 'a -> 'a according to the ML typing rules...
But if you help OCaml with a type constraint, you'll get the more
efficient code that you expect:

  let max (a:int) (b:int) = ...

> , and so it generates very inefficient
> code. This is a bit surprising because (I think) max can't be called
> from outside the module, and the one place where it is called
> specifies the type.
> So I'm guessing here that OCaml doesn't really optimize across
> functions?

You're correct that OCaml doesn't do type specialization for
user-defined functions (only for some predefined operations like ">"). 
It does perform some inter-function optimizations such as function
inlining and known call optimizations.

- Xavier Leroy

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-06-25 15:37 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-25 15:05 [Caml-list] OCaml not automatically specialising a polymorphic function Richard Jones
2003-06-25 15:36 ` Xavier Leroy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).