comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Why .ads as well as .adb?
Date: Mon, 3 Jun 2019 10:13:40 +0200
Date: 2019-06-03T10:13:40+02:00	[thread overview]
Message-ID: <qd2krk$pin$1@gioia.aioe.org> (raw)
In-Reply-To: dbbcf7b1-091f-4c87-b2b1-021bb9503b70@googlegroups.com

On 2019-06-03 09:35, Maciej Sobczak wrote:
>> That is not possible. You cannot generate specification from
>> implementation and conversely.
> 
> Yes, you can. You can generate specs from implementations.

No. Specification describes a class of implementations. You cannot 
deduce class from its single member.

>> In both cases there is additional
>> information missing.
> 
> Why is it missing? What if we put all information in implementation? Then there is nothing missing and we can generate specs from it.

It is not possible as well. The language of specifications (to be 
useful) must have statements non-existing in the language of 
implementations.

> Your argument is not convincing. It can be expanded into:
> - I have separate spec and implementation files, so I can write my contracts in the spec and then I don't have to repeat them in bodies.

No. The right statement would be: I cannot write contract in the body.

Contract and an implementation of are in two different languages with 
two different domains. They cannot be spelt in a single language.

BTW, this is why Ada's dynamic constraints is not a contract. They are 
implementations of a contract to raise an exception when some Boolean 
expression yields False.

> - Well, I did not write my contracts in bodies, so they are not there and therefore something is missing, so I cannot generate specs from it.
>
> ?

Right.

>> Compare also Ada's declarative regions with C++'s
>> ad-hoc declarations:
>>
>>      declare
>>         X : Integer;
>>      begin
>>         ... -- Some code
>>         X := 1;
>>      end;
>>
>>      {
>>         ... // Some code
>>         int X;
>>         X = 1;
>>      }
> 
> When I compare these two examples, I see that C++ is more readable, because it allows me to minimize the scope of names that are not needed until in later parts of code, without messing with useless constructs like this:
> 
> begin
>     -- some code
>     declare
>        X : Integer;
>     begin
>        X := 1;
>     end;
> end;
> 
> There is *nothing* gained in this construct and it is equivalent to the C++ example above.

The gain is definition of the scope. C++ equivalent, which I would force 
in each C++ programming guideline, would be:

    {
       ... // Some code
       {
          int X;
          X = 1;
          ..
       }
       .. // Some code
    }

>> BTW when writing OS-dependent code it is very convenient
>> to have one *.ads file and several *.adb files.
> 
> I do that in C++, too.
> 
>> And, in the
>> tool-chain you just switch to another *.adb when changing the target.
> 
> And, in the tool-chain you just switch to another *.cpp when changing the target.
>   
>> Compare that with C++'s #ifdef infestations.
> 
> What? Why would anybody do that, apart from those few cases where this approach genuinely improves the readability of the code and where having separate compilation units would actually be more difficult to maintain?

Yes, why? There must be something contagious in #ifdef's, or maybe, it 
just what C/C++ inherently is?

My guess and my point is that this is what you inevitably get without 
proper contracts (=> separated specifications).

> In other words: for multiplatform development, C++ gives me 2 solutions and I can choose the one which is more beneficial in the given context. Ada offers only one. How is this better?

Choice is a burden. Would you can have a water tap with a third choice: 
hot, cold, sulfuric acid?

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


  parent reply	other threads:[~2019-06-03  8:13 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 [this message]
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
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