Version française
Home     About     Download     Resources     Contact us    
Browse thread
Re: Separate compilation
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <Xavier.Leroy@i...>
Subject: Re: Separate compilation

[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