Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] unused function detection
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2004-06-22 (19:46)
From: Michael Furr <furr@c...>
Subject: Re: [Caml-list] unused function detection

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.


To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: