comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Separate Compilation in Programming Languages
Date: Sat, 23 Feb 2008 10:16:56 -0500
Date: 2008-02-23T10:16:56-05:00	[thread overview]
Message-ID: <wcc63wfpus7.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 7xJvj.7420$Ru4.4246@newssvr19.news.prodigy.net

<adaworks@sbcglobal.net> writes:

> My concern is dependency management.

OK, but I still don't fully understand what you're getting at.
You said elsewhere in this thread that you are NOT concerned with
recompilation costs.  That's good -- recompilation cost should
primarily be an implementation concern.

I'm guessing that your point has nothing to do with "compilation" at
all, separate or otherwise.  It has to do with the organization of the
program into separate source files -- specifically separation of spec
and body (interface and implementation, to use more language-neutral
terms).  Right?

>...I will give an example in source
> code.
>
> with X, Y, Z, Q, R, S;  -- a set of library units on which we are dependent
> package A is                -- a package specification
>
>      -- types and methods for this package
>
> end A;
>
> At this point, everything that is dependent on this specification is also
> dependent on the library units on which A is dependent.   In Ada, we
> can move those dependencies to the package body.  So, we have:
>
> package A is                -- a package specification
>
>      -- types and methods for this package
>
> end A;
>
> with X, Y, Z, Q, R, S;  -- only body is dependent on these
> package body A is                -- a package specification
>
>      -- implementation of package A
>
> end A;
>
> By moving the dependencies to the package body, the specification
> is dependency free, as are all of the library units that become
> dependent on it.

OK, so you like having textually separate spec and body,
as do I.  But what specific advantages are you talking
about in this thread?

Readability?  That is, when looking at a client of A, you don't
need to worry about X,Y,...S.  This is good, but it's got little to do
with separate compilation.

Source modification?  A change in X could introduce a bug
into a client of A -- so there really _is_ a dependency
in that sense.

One advantage of Ada over some languages (e.g. C) is that the
implementation can know what source files are part of each program,
by following the with clauses.  I really hate having to write a make
file that lists out all the .o files that need to be linked together --
Ada allows that to be completely automated (that's what gnatmake does).

Something else?

Note that Ada requires some implementation details to appear in the
package spec -- namely, the stuff that goes in the private part, plus
the with clauses needed by that private part.  That's ugly, IMHO.

>...Further, if we use the "is separate" feature,
> we can push those dependencies even further down into the
> implementation, not something any of the other languages
> do very well.

Shrug.  I don't use "is separate" much.  Child packages are almost
always better, because you can separate the spec _and_ the body,
and because the parent need not know about the child.  Child packages
provide the same advantage of being able to "push down" the
dependencies.

> I don't think this is possible in Java, Eiffel, or C#.

It's possible using interfaces.  Clients of an interface do not depend
on classes that implement the interface, any more than clients of an Ada
package spec depend on its body.  You suggested otherwise elsewhere in
this thread, but I think you're wrong, or else I'm misunderstanding what
you mean by "depend".

Interfaces are more flexible than spec/body in that they allow multiple
"bodies".  And of course Ada 2005 has interfaces.  Note that an
interface will typically be declared in a package spec with no
corresponding body.

>...It is only possible
> in C++ by using the #include in the CPP file, and that is error-prone.

I agree that #include is a kludge.

> As noted by someone else, an automated configuration control
> software can be of help in this regard, but it is not built into the
> language as it is with Ada.
>>
> RD> By the way, Eiffel compilers typically use incremental compilation,
> RD> which if implemented well, is strictly superior to separate
> RD> compilation on a file-by-file basis.
>
> But it still does not seem to solve the dependency issue as cleanly as
> Ada does.

Eiffel has separate specs and bodies -- except that the spec is
automatically generated from the body, rather than being written by
hand.  I prefer to consider the spec to be a source file in its own
right, as in Ada, but it's not _that_ different from Eiffel.

- Bob



  parent reply	other threads:[~2008-02-23 15:16 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-22 17:35 Separate Compilation in Programming Languages adaworks
2008-02-22 17:52 ` Dirk Heinrichs
2008-02-23  0:23   ` adaworks
2008-02-22 18:10 ` Ray Blaak
2008-02-22 23:53   ` adaworks
2008-02-23  1:40     ` Ray Blaak
2008-02-23  7:29       ` adaworks
2008-02-23 18:42         ` Ray Blaak
2008-02-22 18:18 ` Niklas Holsti
2008-02-23  0:14   ` adaworks
2008-02-23  7:23     ` Niklas Holsti
2008-02-23  7:31       ` Niklas Holsti
2008-02-23 16:00         ` adaworks
2008-02-23 12:27     ` Georg Bauhaus
2008-02-23 12:37   ` Dirk Heinrichs
2008-02-23 13:03     ` Niklas Holsti
2008-02-22 19:11 ` Dmitry A. Kazakov
2008-02-23  0:16   ` adaworks
2008-02-22 19:33 ` Larry Kilgallen
2008-02-22 20:47 ` Simon Wright
2008-02-22 21:27 ` Robert A Duff
2008-02-23  0:12   ` adaworks
2008-02-23 10:28     ` framefritti
2008-02-23 12:45     ` Dirk Heinrichs
2008-02-23 15:16     ` Robert A Duff [this message]
2008-02-23 16:47       ` adaworks
2008-02-23 18:47         ` Ray Blaak
2008-02-24  7:40           ` adaworks
2008-02-24  9:42             ` Ray Blaak
2008-02-24 20:41               ` adaworks
2008-02-25  2:37                 ` Ray Blaak
2008-02-25  7:06                   ` adaworks
2008-02-25 13:12                     ` Robert A Duff
2008-02-25 17:44                     ` Ray Blaak
2008-02-25 22:16                       ` Ray Blaak
2008-02-26  5:10                         ` John W. Kennedy
2008-02-26 19:08                           ` Ray Blaak
2008-02-26  7:11                         ` adaworks
2008-02-26 13:38                           ` Stephen Leake
2008-02-26 14:56                             ` adaworks
2008-02-26 19:15                               ` Ray Blaak
2008-02-26 19:13                           ` Ray Blaak
2008-02-26 21:25                             ` Ray Blaak
2008-02-27  1:15                               ` Robert A Duff
2008-02-26  7:06                       ` adaworks
2008-02-26 11:42                       ` Alex R. Mosteo
2008-02-26 15:05                         ` adaworks
2008-02-26 15:15                           ` Alex R. Mosteo
2008-02-24 17:26             ` Robert A Duff
2008-02-23 20:46         ` Robert A Duff
2008-02-24  7:31           ` adaworks
2008-02-24 17:20             ` Robert A Duff
2008-02-24 20:33               ` adaworks
2008-02-25  1:07                 ` Robert A Duff
2008-02-26  7:29                   ` adaworks
2008-02-26 19:22                     ` Ray Blaak
2008-02-27  1:58                       ` adaworks
2008-02-27 20:34                         ` Ray Blaak
2008-02-27 22:31                           ` Robert A Duff
2008-02-27 23:35                             ` Ray Blaak
2008-02-28  0:19                               ` Randy Brukardt
2008-02-28  9:18                               ` Georg Bauhaus
2008-02-29  5:57                             ` adaworks
2008-02-29  6:04                               ` Ray Blaak
2008-02-29 10:48                                 ` Alex R. Mosteo
2008-02-29 17:05                                 ` adaworks
2008-02-29 18:33                                   ` Ray Blaak
2008-02-29  6:10                           ` adaworks
2008-02-22 22:16 ` Jeffrey R. Carter
2008-02-23 13:44 ` Brian Drummond
2008-02-23 17:19   ` adaworks
2008-02-25  7:53 ` Jean-Pierre Rosen
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox