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] Building large and portable projects
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2003-11-22 (15:46)
From: skaller <skaller@o...>
Subject: Re: [Caml-list] Building large and portable projects
On Sat, 2003-11-22 at 04:53, Eric Dahlman wrote:
> skaller wrote:
> > But it is much worse. A target can
> > depend on itself. Interscript assumes that.
> > An example is a Latex build, which depends
> > on auxilliary files generated by the build
> > [Ocamldoc output can take 4 passes to fixate
> > for example].
> > 
> > This leads to the first novel idea. Fixpoints.
> > Interscript is based on that idea.
> Just to be pedantic ;-)  A Tex or Latex build is not guaranteed to 
> converge so you may not have a fixed point in the computation. They can 
> oscillate and it may be necessary to slightly alter the source document 
> to get things to settle down.

If I may also be pedantic: this is not a matter of pedantry :-)

The idea of fixpoints is still novel and useful here.
As you comment, oscillations are possible. Divergence
is also possible. Interscript has a command line like

	iscr --passes=4 other options ...

which limits the number of passes. The default is one
pass, but it has a persistence mechanism (Python marshal),
so that executing the command 4 times is roughly equivalent
to a single invocation with --passes=4, except that with
the --passes=4 option 1 to 4 passes are executed.

Interscript is also Make friendly -- if it writes the
same as a files contents the timestamps are not changed.
[Which is how it detects convergence :-]

It *also* has dependency checking which can detect
that a pass would be the same as the last pass and
so it is possible that 0 passes are executed.

The design is not particularly efficient, however
it handles things like: you can read a file that
doesn't exist, and later write it. No problem.
The error on the first pass is ignored. The file
is there on the second pass .. although it might
not fix.

BTW: there is a fun caveat. The one thing that
you must be careful NOT to ever do in Interscript
is put the code generation time directly into the generated
code -- that guarrantees divergence :-)

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