comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Why .ads as well as .adb?
Date: Tue, 4 Jun 2019 00:04:06 +0300
Date: 2019-06-04T00:04:06+03:00	[thread overview]
Message-ID: <gllga6F2lv2U1@mid.individual.net> (raw)
In-Reply-To: <2276685b-0e6b-46d1-ae7e-e7f1c0781dc0@googlegroups.com>

On 19-06-03 22:23 , John Perry wrote:
> On Monday, June 3, 2019 at 9:50:03 AM UTC-5, Niklas Holsti wrote:
>>> "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?
>
> Yes; that's the entire point of an .smb file. The Oberon compilers
> I'm familiar with generate both symbol (.smb) and object files (.o
> or .class, depending on the target). I've tested that they will check
> a module against .smb, without having an object file.

Well and good! However (and as you said) the Oberon library must also be
documented in some human-readable form (I assume the .smb files are not
human-readable). In contrast the .ads files are human-readable (or at
least programmer-readable). But perhaps Doxygen-type tools erase that
difference between Ada and Oberon.

(Personally I avoid Doxygen -- the source-code annotations feel ugly,
decreasing both writability and readability. I much prefer tools that
make code browsable and inter-linked without such annotations, for
example gnathtml or an IDE like GPS, although these tools currently have 
some draw-backs in the source formatting they require.)

> Wirth states in "Modula-2 and Oberon" [2] that symbol files have an
> advantage over source files, in that the compiler can record a
> version number with the file, and automatically update it.

For GNAT, the compiler-generated .ali (Ada Library Information) files
have timestamps etc. that serve that function, to check that the object
files correspond to the .ads files.

All Ada compilers are expected to check consistency of sources (as last 
compiled) and objects at bind/link-time, but I'm not sure if all 
compilers have the ability to do that when importing object code 
compiled by other parties into their program library.

> ... so that made me
> wonder why the .ads/.adb distinction was retained, at least in gnat.
> (I'm not actually aware if that's required by the language itself.)

The language requires that a package must have both a declaration and a 
body. These conform to different non-terminal symbols in the grammar and 
correspond to GNAT's .ads and .adb files. The language further requires 
the user to compile (or provide for compilation) the declaration before 
compiling the body, but the language does not require that the 
declaration text and the body text be in separate text files.

In fact there is a non-terminal grammar symbol "compilation" that is a 
sequence of "compilation units", such as package declarations and 
bodies, and the standard says that an entire "compilation" can be 
submitted to the compiler. That's essentially why gnatchop was created.

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

  reply	other threads:[~2019-06-03 21:04 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
2019-06-03 19:23     ` John Perry
2019-06-03 21:04       ` Niklas Holsti [this message]
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