caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "Nicolas Cannasse" <warplayer@free.fr>
To: "Xavier Leroy" <xavier.leroy@inria.fr>,
	"Alain Frisch" <Alain.Frisch@ens.fr>
Cc: "Caml list" <caml-list@inria.fr>
Subject: Re: [Caml-list] Proposal for separate compilation
Date: Wed, 26 May 2004 17:12:07 +0200	[thread overview]
Message-ID: <003f01c44333$cf907340$ef01a8c0@warp> (raw)
In-Reply-To: <20040526103203.A16448@pauillac.inria.fr>

> > Currently, a compiled unit (.cmi,.cmo,.cmx,.o) refers to another unit
> > through its symbolic name, as used in the source file.  My proposal is
> > to replace these names with unique identifiers.
>
> This is an interesting proposal.  You might be interested in Martin
> Elsman's PhD (DIKU, 1998), which uses techniques along these lines in
> a defunctorizing, whole-program SML compiler.
>
> There is one thing that puzzles me in your proposal.  Consider two
> compilation units A and B, where B refers to A.
>
> When we compile B.ml, it can be that the only thing the compiler knows
> about A is its interface A.cmi.  This is certainly true for ocamlc.
> ocamlopt can take advantage of information on A's implementation, as
> found in A.cmx, but in the current model the presence of A.cmx isn't
> mandatory to compile B.ml, ocamlopt will generate less efficient but
> correct code if A.cmx isn't there.
>
> So, what unique identifier is B going to use to refer to A's definition?
> Since A.cmi is the only available info on A, that
> identifier must be tied to A.cmi: either a hash of A's interface, or
> some unique identifier generated when A.mli is compiled into A.cmi.
> It looks like you're going to get name collisions when several
> compilation units have the same interface.  More generally, you
> haven't fully severed the connection that we have in the current
> system between the identifier representing the definitions of a
> compilation unit and the name or identifier of its interface.
>
> There are several ways to work around this issue.

Maybe I didn't understand well, but I think I have a more easy answer :
if the identifier is composed of both the hash of the cmi and the name of
the module (so something like (A,hash A)) then we have name collision only
when we have several compilation units with both the same name and same
interface. This is more unlikely to happen, or the user is using two
different implementations of the same module at the same time, and then a
linker error will make him choose one (whatever the choice, the program is
correctly typed but both implementations can have different semantics and
then leave some bugs). Other way is to add some random data to the hash when
the CMI is compiled (and of course ignore this extra-data when recompiling
to avoid spending CPU ).
BTW, is there any way such a proposal will end up into the caml distribution
?

Best Regards,
Nicolas Cannasse

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2004-05-26 15:13 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-21 16:32 Alain Frisch
2004-05-21 18:11 ` Richard Jones
2004-05-21 18:27 ` Nicolas Cannasse
2004-05-26  8:32 ` Xavier Leroy
2004-05-26 15:12   ` Nicolas Cannasse [this message]
2004-05-28  0:33   ` Alain Frisch
2004-05-28  1:54     ` Jacques GARRIGUE
2004-05-28  7:13       ` Nicolas Cannasse
2004-05-28  9:55       ` Alain Frisch
2004-05-28 10:14         ` Christian Lindig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='003f01c44333$cf907340$ef01a8c0@warp' \
    --to=warplayer@free.fr \
    --cc=Alain.Frisch@ens.fr \
    --cc=caml-list@inria.fr \
    --cc=xavier.leroy@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).