Re: Separate compilation

Xavier Leroy (Xavier.Leroy@inria.fr)
Wed, 20 Dec 1995 18:33:15 +0100 (MET)

From: Xavier Leroy <Xavier.Leroy@inria.fr>
Message-Id: <199512201733.SAA27420@pauillac.inria.fr>
Subject: Re: Separate compilation
To: Emmanuel.Engel@lri.fr (Emmanuel Engel)
Date: Wed, 20 Dec 1995 18:33:15 +0100 (MET)
In-Reply-To: <199512191434.PAA09839@newsun8.lri.fr> from "Emmanuel Engel" at Dec 19, 95 03:34:40 pm

[English summary: in dependency files generated by csldep,
.cmx files depend on .cmx files because of cross-module optimizations.]

> Les dependances entre fichiers ne passent
> pas par l'interface (ie cmi) ?

Soit A un module qui utilise le module B.

A.cmo ne depend que de l'interface de B, c'est-a-dire B.cmi, car cslc
n'a besoin, pour produire le code de A, que de connaitre l'interface
de B.

En revanche, cslopt utilise pour compiler A des informations
d'optimisation sur B (stockees dans B.cmx) qui sont specifiques a
l'implementation B.ml. Donc, A doit etre recompile a chaque fois que
B.cmx change, c'est-a-dire a chaque fois que l'implementation B.ml
change. Sinon, les modules du programme peuvent se retrouver optimises
de maniere incoherente, et une erreur se produit au moment du link.

De maniere plus generale, toute optimisation inter-module se traduit
par une perte de compilation separee: davantage de recompilation est
necessaire apres un changement. Dans le cas de Caml Special Light, je
pense que c'est tolerable en pratique car le compilateur natif cslopt
s'emploie de preference sur des projets deja relativement stables;
pour le developpement rapide, mieux vaut utiliser compilateur bytecode
cslc, qui lui offre le plus haut degre de compilation separee.

- Xavier Leroy