comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Why .ads as well as .adb?
Date: Mon, 3 Jun 2019 17:50:00 +0300
Date: 2019-06-03T17:50:00+03:00	[thread overview]
Message-ID: <glkqcpFsglcU1@mid.individual.net> (raw)
In-Reply-To: <12ffe476-35a7-4442-994e-9a03972619bc@googlegroups.com>

On 19-06-03 16:37 , John Perry wrote:
> Thanks to everyone for the replies. Personally, I find three of them
> especially compelling:
>
> "As a teacher, I keep fighting with students who jump to writing
> bodies too early."
>
> [I know exactly what this is like.]

The separation (and early creation) of .ads files from .adb files was 
the main reason cited for the success of the first Ada project at my 
alma mater (a Prolog system -- this was during the "5th generation" 
fad). That project had markedly fewer integration and interfacing 
problems than earlier projects implemented in (an extended) Pascal.

> "teams can work separated from each other as needed, without the
> project having to distribute all of the implementation to everyone"
>
> [Having separate specification files against which one can *compile*
> would be useful, not just convenient, though I think it's arguable
> that one can do this in Oberon, too, via .smb files and
> documentation.]

If an Ada project needs to use an Ada library that is not open-source 
and was developed by someone else, the library provider can deliver the 
.ads source files to define the library API, but deliver only the object 
code for the .adb files, thus keeping the library implementation secret. 
Can Oberon .smb files do that?

In Ada this can be done even if the library is actually implemented in 
some other language such as C.

> "convenience"
>
> [not a direct quote, but several people point to this, and until I
> read their explanations I thought the convenience ran in the other
> direction]

When I write client code for a package, I find it much more convenient 
to study the package's interface from its .ads file, because the .ads 
file is usually shorter than the .adb file and contains only information 
useful to the client (up to the "private" part). However, I admit that a 
smart IDE could display a filtered view of a "combined .ads/.adb" file, 
showing me only the interface and not the implementation.

> So I was surprised that some people made absolute negations of the
> possibility along these lines:
>
> "You can't generate specification from implementation."

That is true, IMO, for current Ada, but I'm sure that Ada could be 
extended with pragmas or keywords to allow a combined .ads/.adb file 
from which a "pure .ads" could be extracted. But I don't see any 
advantage in that, given the other advantages of separate .ads and .adb.

> I especially wonder this since one of them had just referred to
> gnatchop, whose online documentation provides an example that does
> precisely that [1].

No, gnatchop reads a source file that is a simple concatenation of any 
number of .ads and .adb files, and just finds the boundaries of the 
concatenated files and spits out the separated (de-concatenated) files. 
It is a bit like "unzip" but uses Ada syntax to separate out the 
individual files from the "archive" (the concatenated file).

Ada compilers other than GNAT accepted such concatenated input source 
files as "compilations". Gnatchop was implemented to help apply GNAT to 
such source files.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .


  reply	other threads:[~2019-06-03 14:50 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-02  0:48 Why .ads as well as .adb? John Perry
2019-06-02  5:42 ` J-P. Rosen
2019-06-02  6:39 ` Dmitry A. Kazakov
2019-06-03  7:35   ` Maciej Sobczak
2019-06-03  7:57     ` J-P. Rosen
2019-06-03 19:49       ` Keith Thompson
2019-06-04  8:03       ` Maciej Sobczak
2019-06-03  8:13     ` Dmitry A. Kazakov
2019-06-03 19:51       ` Keith Thompson
2019-06-03 20:18         ` Dmitry A. Kazakov
2019-06-04  8:24       ` Maciej Sobczak
2019-06-04  9:33         ` Dmitry A. Kazakov
2019-06-05  9:04           ` Maciej Sobczak
2019-06-05 12:48             ` Dmitry A. Kazakov
2019-06-05 17:12               ` G. B.
2019-06-05 18:50                 ` Optikos
2019-06-05 22:57                   ` Randy Brukardt
2019-06-04 22:28         ` Randy Brukardt
2019-06-05  8:28           ` Maciej Sobczak
2019-06-05  9:20             ` J-P. Rosen
2019-06-05  9:28               ` Paul Rubin
2019-06-05 10:11                 ` Niklas Holsti
2019-06-05 12:58                   ` Maciej Sobczak
2019-06-05 14:28                     ` Niklas Holsti
2019-06-06  7:34                       ` Maciej Sobczak
2019-06-06 19:51                         ` Keith Thompson
2019-06-06 20:27                           ` J-P. Rosen
2019-06-06 21:12                         ` Randy Brukardt
2019-06-06 21:17                         ` Randy Brukardt
2019-06-06 22:08                           ` Dennis Lee Bieber
2019-06-07  7:59                           ` Maciej Sobczak
2019-06-07 10:42                             ` alby.gamper
2019-06-07 16:59                               ` Dennis Lee Bieber
2019-06-07 14:10                             ` Brad Moore
2019-06-07 23:37                               ` Paul Rubin
2019-06-08  1:16                                 ` Brad Moore
2019-06-08  7:34                                   ` Simon Wright
2019-06-08 17:44                                 ` G.B.
2019-06-08 21:41                                 ` Keith Thompson
2019-06-09  0:40                                   ` Paul Rubin
2019-06-09 18:56                                     ` Keith Thompson
2019-06-09 20:35                                       ` John Perry
2019-06-09 21:15                                         ` Niklas Holsti
2019-06-09 22:37                                           ` John Perry
2019-06-10  9:01                                             ` Simon Wright
2019-06-10 13:15                                               ` Simon Wright
2019-06-10  9:22                                             ` Niklas Holsti
2019-06-09 21:37                                         ` Simon Wright
2019-06-09 22:40                                           ` John Perry
2019-06-10  9:07                                             ` Simon Wright
2019-06-09 21:46                                         ` Niklas Holsti
2019-06-10 17:11                                         ` Dennis Lee Bieber
2019-06-08  4:57                             ` Randy Brukardt
2019-06-08 23:57                               ` Optikos
2019-06-09  0:43                                 ` Paul Rubin
2019-06-10  8:17                               ` Maciej Sobczak
2019-06-10 19:10                                 ` G.B.
2019-06-10 22:07                                 ` Randy Brukardt
2019-06-11  0:32                                   ` Optikos
2019-06-11 15:39                                     ` Brad Moore
2019-06-11 16:14                                       ` John Perry
2019-06-11 16:46                                         ` Shark8
2019-06-11 19:29                                           ` John Perry
2019-06-14  6:12                                             ` Brad Moore
2019-06-14 21:51                                               ` John Perry
2019-06-14 16:29                                             ` djakoogler
2019-06-11 18:19                                         ` joakimds
2019-06-11 15:49                                   ` Jeffrey R. Carter
2019-06-07  7:36                       ` Niklas Holsti
2019-06-05 22:41                     ` Randy Brukardt
2019-06-06  3:34             ` Keith Thompson
2019-06-06  7:29               ` Maciej Sobczak
2019-06-06 15:30                 ` John Perry
2019-06-06 15:41                 ` Brad Moore
2019-06-06 19:42                 ` Keith Thompson
2019-06-06 16:37               ` Dennis Lee Bieber
2019-06-02  9:59 ` joakimds
2019-06-02 20:14 ` G.B.
2019-06-03 13:37 ` John Perry
2019-06-03 14:50   ` Niklas Holsti [this message]
2019-06-03 19:23     ` John Perry
2019-06-03 21:04       ` Niklas Holsti
2019-06-03 18:51   ` Lucretia
2019-06-03 19:32     ` John Perry
2019-06-03 17:00 ` Jeffrey R. Carter
2019-06-03 18:59   ` Lucretia
2019-06-03 19:29   ` John Perry
2019-06-03 20:00     ` Jeffrey R. Carter
replies disabled

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