[m-dev.] interface files

Simon Taylor stayl at cs.mu.OZ.AU
Mon May 24 10:27:03 AEST 2004

On 24-May-2004, Zoltan Somogyi <zs at cs.mu.OZ.AU> wrote:
> Is there any documentation about what is supposed to go into each kind
> of interface file (.int0, .int3, .int2 and .int), and what principle governs
> the contents of .d files, of apart from the comments in modules.m?

As far as I know, that's all there is.

> The reason I ask is that I would like a fix for a problem that has been
> annoying me for a few months. The problem is that if I make a change
> that should be purely internal to a module in the compiler, such as
> defining a new local type or adding a private import_module, mmake
> often decides to remake everything.
> I originally thought that the main problem was that the .int2 file
> contained too much information: it contains local type definitions
> and local imports, even if they aren't required to fully module qualify
> a type that occurs on the right hand type of a type equivalence
> in which the type on the left hand side is exported from the module.

That's most of the problem.  modules.m needs to do a transitive
closure of the items needed by items in the interface to work
out what is actually required.
> I still think this is a problem, but now I think another problem may be
> more important. This is that the .d files make each file dependent on
> the .int2 files of too many other modules. A simple grep for
> check_hlds.typecheck.int2 in compiler/*.d shows that check_hlds.typecheck.int2
> is included in just about all the .d files in the compiler directory.
> The exceptions fall into two categories. The unsurprising category
> is the .d files of modules in the libs package and of gcc.m, which don't
> import any submodule of check_hlds.m in any way, directly or indirectly.
> The surprising category is several other submodules of check_hlds.m.
> So we have a situation in which fellow submodules of check_hlds.m
> don't depend on check_hlds.typecheck.int2, while submodules of other
> top-level modules, such as aditi_backend.m do depend on
> check_hlds.typecheck.int2. A spot check of the dependencies of modules
> on some other .int2 files showed the same pattern. I can see no
> justification for these dependencies.

`mmc --generate-dependencies' is very conservative.  The first
actual compilation should improve the dependencies, but the
extra dependencies are mostly caused by the problem above.

> I suspect the culprit is the transitive closure operation in modules.m
> Simon introduced with his changes in december; the problem seems to date
> from then. However, cannot be sure about the right fix without more
> information or a lot more work.
> I hope this jogs something in Simon's memory, and he can either fix the
> problem, or give me the documentation that I need to fix it myself.

Compiling with `--smart-recompilaton' may also help.

mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au

More information about the developers mailing list