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 VAA03261; Tue, 22 Jun 2004 21:46:51 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id VAA02214 for ; Tue, 22 Jun 2004 21:46:50 +0200 (MET DST) Received: from junkmail.cs.umd.edu (junkmail.cs.umd.edu [128.8.128.69]) by nez-perce.inria.fr (8.12.10/8.12.10) with ESMTP id i5MJknEV000622 for ; Tue, 22 Jun 2004 21:46:50 +0200 Received: from ramen.cs.umd.edu (ramen.cs.umd.edu [128.8.129.77]) by junkmail.cs.umd.edu (8.12.10/8.12.5) with ESMTP id i5MJkm6p017178 for ; Tue, 22 Jun 2004 15:46:49 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by ramen.cs.umd.edu (8.12.10/8.12.5) with ESMTP id i5MJkm7c002883 for ; Tue, 22 Jun 2004 15:46:48 -0400 (EDT) Date: Tue, 22 Jun 2004 15:46:48 -0400 (EDT) From: Michael Furr To: caml-list Subject: Re: [Caml-list] unused function detection In-Reply-To: <1087932428.29427.33.camel@pelican.wigram> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Miltered: at nez-perce with ID 40D88CA9.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 2004:99 opaque:01 re-implement:01 ocamldep:01 val:01 val:01 inferred:01 inferred:01 -mike:01 compiler:01 ints:01 ocaml:01 int:01 int:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk On 23 Jun 2004, skaller wrote: > On Wed, 2004-06-23 at 04:33, Michael Furr wrote: > > > I just finished(well almost) writing a tool which does something very > > similar. The motivation was if I have some module M and a program P, what > > is the most general(opaque) signature for M which still lets P compile. > > This information can be extremely useful since you know exactly which > > types are used opaquely and thus you can safely re-implement those data > > structures. Also, if you have some internal function in a module and it > > is not used anywhere in the program, it won't show up in the resulting > > signature. > > ocaml -i + ocamldep. Shaken (not stirred) Well, for handling types, its slightly more than that. For instance, if I'm using some module with a definition: type t = int * int val f0 : int -> int -> t val f1 : int -> t val f2 : t -> t and I have the program: let x = f0 1 2 in let y = f1 (fst x) in let z = f2 x y in z Then the inferred signature would be type inferred1; type inferred2; type inferred3; type t = inferred1 * inferred2 val f0 : int -> int -> t val f1 : inferred1 -> t val f2 : t -> inferred3 Thus you would know that 't' is only treated as a pair and never as a pair of ints. Thus you could easily, say, swap out int for int32 without affecting the rest of the program. > Hmmm. At present, you are looking for uses of functions [...] > To solve my problem, you only need to add M to that list, > looking for uses of M.f1 etc in M itself. [Of course I want > the complement of the answer .. ] Which shouldn't be too hard. The tool is just a (non-invasive) patch to the compiler which I'll probably clean up and release in a few weeks once I get a little more time. If you're interested in playing around with it, let me know and I'll try to get to it sooner rather than later. -mike ------------------- 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