Introduction
Program analysis tools provide supplementary information to the
programmer in addition to the feedback from the compiler and the
linker. Some of these tools perform a static analysis, i.e.
they look at the code (either as text or in the form of a syntax tree)
and determine certain properties like interdependency of modules or
uncaught exceptions. Other tools perform a dynamic analysis, i.e. they
look at the flow of execution. Analysis tools are useful for
determining the number of calls to certain functions, getting a trace
of the flow of arguments, or determining the time spent in certain
parts of the program. Some are interactive, like the tools for
debugging. In this case program execution is modified to account for
user interaction. It is then possible to set breakpoints, in order to
look at values or to restart program execution with different
arguments.
The Objective CAML distribution includes such tools. Some of them have
rather unusual characteristics, mostly dealing with static typing. It
is, in fact, this static typing that guarantees the absence of type
errors during program execution and enables the compiler to produce
efficient code with a small memory footprint. Typing information is
partly lost for constructed Objective CAML values. This creates certain
difficulties, e.g. the impossibility of showing the arguments of
polymorphic functions.