From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id RAA22565; Wed, 25 Jun 2003 17:37:32 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id RAA22114 for ; Wed, 25 Jun 2003 17:37:31 +0200 (MET DST) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h5PFb0j13474; Wed, 25 Jun 2003 17:37:00 +0200 (MET DST) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id RAA22796; Wed, 25 Jun 2003 17:36:59 +0200 (MET DST) Date: Wed, 25 Jun 2003 17:36:59 +0200 From: Xavier Leroy To: Richard Jones Cc: caml-list@inria.fr Subject: Re: [Caml-list] OCaml not automatically specialising a polymorphic function Message-ID: <20030625173659.B22658@pauillac.inria.fr> References: <20030625150535.GA15972@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 1.0i In-Reply-To: <20030625150535.GA15972@redhat.com>; from rich@annexia.org on Wed, Jun 25, 2003 at 04:05:35PM +0100 X-Spam: no; 0.00; caml-list:01 inlining:01 inefficient:01 ocaml:01 surprising:01 assembler:01 int:01 polymorphic:01 user-defined:02 module:03 typing:03 let:04 efficient:05 functions:05 constraint:05 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk > - 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