comp.lang.ada
 help / color / mirror / Atom feed
From: John Perry <john.perry@usm.edu>
Subject: Re: Why .ads as well as .adb?
Date: Sun, 9 Jun 2019 13:35:03 -0700 (PDT)
Date: 2019-06-09T13:35:03-07:00	[thread overview]
Message-ID: <561c766c-4f9c-432c-be9b-822dd9c3c8ba@googlegroups.com> (raw)
In-Reply-To: <lno936r3jw.fsf@kst-u.example.com>

(1) Ada's approach has one advantage that I don't remember anyone mentioning (apologies if you did and I missed it or forgot):

I can't remember the number of times I modified a C++ / Eiffel / Java / Oberon / whatever file, and forgot to update the documentation. So now the specification / documentation and the implementation are out of sync, and in my experience nothing is harder to debug than a wrongly documented specification.

In Ada, if you forget to update the specification file, your system probably won't compile. The language thus forces you to update that.

That said...

(2) I've read some very good arguments made in favor of separate specification files, but I don't understand why the conversation keeps coming around to "the specification file provides convenient documentation," or even, "if I want to see the specification from the implementation, I have to run a tool every time I want to see it, and that can be inconvenient." Those aren't just weak arguments; they're plainly false.

When I want to know how Ada.Text_IO works, I don't look up the specification file. I don't even know where to find Ada.Text_IO on my system. I just went to look for it, and gave up pretty quickly. I could probably find it if I tried hard enough, but it's far more convenient to visit [1], which has a hyperlink to Ada.Text_IO, as well as lots of other things.

I imagine that [1] was generated by some software tool. Similar tools exist for other languages. Take a look at [2] to see what a nice job they can do -- a LOT nicer than [1]. If I click on BINARY_SEARCH_TREE, not only do I get the specification for BINARY_SEARCH_TREE a la [1], but I also get links to related specifications, such as COMPARABLE, TREE_ITERATION_CURSOR, and so forth. This is much, _much_ more helpful than the specification file by itself.

Some have suggested that the markup required to do this can make the source file unreadable. Eiffel's source files are some of the most readable I've ever encountered, certainly no less readable than Ada (IMHO). Doxygen and javadoc markup aren't especially painful to read, either, and they do much the same thing.

Moreover, there's no need to invoke such a tool every time you want to see the specification, and thus no inconvenience at all. You generate the specification / documentation once and it ends up in a file that you can distribute just as easily as an .ads. The only time one has to invoke Doxygen, javadoc, etc. is if the exported objects change.

The downside is that you *have* to remember to update the documentation -- something I usually do remember, but not always. That's what made me think that Ada's approach does offer an advantage here (see above).

[1] http://www.ada-auth.org/standards/12rm/html/RM-TOC.html
[2] https://www.eiffel.org/files/doc/static/19.05/libraries/base/index.html

  reply	other threads:[~2019-06-09 20:35 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 [this message]
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
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