comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Ada Annoyances
Date: Mon, 26 Jun 2017 16:40:50 -0500
Date: 2017-06-26T16:40:50-05:00	[thread overview]
Message-ID: <oirv13$n3$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: 71c4fdcd-4213-4b84-b852-c8674cfaf717@googlegroups.com

"Maciej Sobczak" <see.my.homepage@gmail.com> wrote in message 
news:71c4fdcd-4213-4b84-b852-c8674cfaf717@googlegroups.com...
...
>> In Ada, where redispatching requires explicit work, the vast
>> majority of constructors will never make a dispatching call so there is 
>> very
>> little risk.

>The vast majority? Where does this statistics come from?

Common sense. Constructors shouldn't be doing anything complicated in the 
first place, so there's not much reason for delegation. Even if you do use 
it, dispatching calls are rare in good Ada code. Most of them come from 
factories or global data structures, which are irrelevant here (you're not 
using those things on the constructed object itself within a constructor).

In any case, interfaces and other forms of OOP dispatching are greatly 
overrated; the cases where they can be profitably employed in real-world 
programs are quite rare. (There's much more value from type extension and 
implementation inheritance.)

As I tried to say yesterday, Ada does have a flaw in that allows dispatching 
calls within contructors (and more generally, inside of any primitive 
operations). That requires work of some sort, but it is possible, and it 
shouldn't be. It's too late to fix that in terms of the language, but it's 
easy enough to check with tools like AdaControl.

>I expect programmers to delegate initialization of the base parts to the 
>initialization
> procedure that was already written for the base part, like here:

Surely.

>I'm not sure whether this is majority or minority, but the idiom seems to 
>be intuitive.
>The problem is - even though the view conversion is explicit here, the 
>dispatching
>call in the Base version of Initialize is not and it is there, where the 
>potentially
>unsafe action can occur.

A dispatching call in *any* version of Initialize is a problem, is 
unnecessary, and should have been banned by the language. Don't do it, and 
you'll have no problem to worry about. (And that it true for every 
primitive - "method" in C++ terms.)

...
> These two places can be in separate files, written by different 
> programmers.
> If you decouple explicit from unsafe, this is no longer in the Ada spirit.

Yes, of course if you call broken code, your code will end up broken too. 
Hard to see what could be done about that - it's always possible that the 
base class is written by an incompetent programmer. (Another reason that I 
personally don't think too much of OOP - I want control of everything I 
write -- if I'm going to make a fatal mistake, I at least want it to be 
something that I can improve next time.)

>The complete example (analogous to the C++ example I have written in the 
>other post) is:

I don't buy the usefulness (in real code) of a class-wide Use_Object. My 
experience has been such routines almost always end up needing to be 
primitive (and definitely true in this case).

In any case, we both agree that you shouldn't be able to call Use_Object in 
this case, I suspect our reasons differ but the effect is the same.

>> In any case, this problem is irrelevant.
>
>So guess how did I learn about it...

You wrote some ill-advised Initialize routines? Re-dispatching is almost 
always evil, do it only after VERY careful consideration. (Note that we had 
to fix Pre'Class/Post'Class so they didn't unintentionally cause 
redispatching, as the effect was that a body might not have had the 
precondition it was expecting to have been evaluated).

>> The net takeaway is that a truly type-safe language maybe could be
>> constructed,
>
>Yes. C++ got that part right.

You completely ignored my point about order of initialization, which 
destroys any type-safety up-front. I don't think C++ (or any other 
mainstream language) even tries to get that right...

                               Randy.


  reply	other threads:[~2017-06-26 21:40 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-21  1:12 Ada Annoyances pythoner6
2017-06-21 10:13 ` Lucretia
2017-06-23 15:27   ` raph.amiard
2017-06-23 17:49     ` Randy Brukardt
2017-06-23 19:21       ` Niklas Holsti
2017-06-24  4:02         ` Shark8
2017-06-24 19:55         ` Simon Wright
2017-06-24 20:56           ` Niklas Holsti
2017-06-25 23:43         ` Randy Brukardt
2017-06-26 20:20           ` Niklas Holsti
2017-06-26 21:47             ` Randy Brukardt
2017-06-26 22:23               ` Dmitry A. Kazakov
2017-06-29 19:00               ` Niklas Holsti
2017-06-29 21:29                 ` Robert A Duff
2017-06-30  0:50                   ` Randy Brukardt
2017-07-03 20:39                     ` Robert A Duff
2017-07-04 19:52                       ` Niklas Holsti
2017-07-04 19:32                   ` Niklas Holsti
2017-06-30  0:47                 ` Randy Brukardt
2017-06-30 18:45                   ` Niklas Holsti
2017-06-30 20:06                     ` Robert A Duff
2017-06-29 21:12         ` Robert A Duff
2017-07-04 19:30           ` Niklas Holsti
2017-07-05 20:03             ` Robert A Duff
2017-06-23 19:22       ` Niklas Holsti
2017-06-30 15:02       ` Norman Worth
2017-06-30 23:49         ` pythoner6
2017-07-03  0:04           ` Randy Brukardt
2017-07-03 17:47             ` Jere
2017-07-03 19:43               ` Dmitry A. Kazakov
2017-07-04  2:18               ` Randy Brukardt
2017-12-17 13:47                 ` Prefixed notation for non tagged types Jere
2017-12-17 15:06                   ` Simon Wright
2017-12-17 15:33                     ` Dmitry A. Kazakov
2017-12-18 22:31                     ` Randy Brukardt
2017-12-19  0:40                     ` Jere
2017-12-19 23:04                       ` Randy Brukardt
2017-12-20 12:33                         ` Robert Eachus
2017-06-21 11:58 ` Ada Annoyances joakimds
2017-06-21 12:29   ` Pascal Obry
2017-06-21 14:52     ` pythoner6
2017-06-21 16:11       ` J-P. Rosen
2017-06-21 16:12       ` Dmitry A. Kazakov
2017-06-21 22:45         ` pythoner6
2017-06-22  7:29           ` Dmitry A. Kazakov
2017-06-22 10:29             ` pythoner6
2017-06-22 11:04               ` Egil H H
2017-06-22 13:30               ` Dmitry A. Kazakov
2017-06-22 19:22                 ` Niklas Holsti
2017-06-22 21:52                   ` Dmitry A. Kazakov
2017-06-23  9:33                     ` AdaMagica
2017-06-23 10:25                       ` Simon Wright
2017-06-23  1:00                 ` pythoner6
2017-06-23 15:23         ` raph.amiard
2017-06-23 16:10           ` Dmitry A. Kazakov
2017-06-23 17:41           ` Randy Brukardt
2017-06-23 18:56           ` Maciej Sobczak
2017-06-23 22:18             ` pythoner6
2017-06-24  8:05               ` Dmitry A. Kazakov
2017-06-24  8:35                 ` Maciej Sobczak
2017-06-24  9:07                   ` Dmitry A. Kazakov
2017-06-24 20:50                     ` Maciej Sobczak
2017-06-24 21:06                       ` Dmitry A. Kazakov
2017-06-25 11:33                         ` Maciej Sobczak
2017-06-25 14:32                           ` Dmitry A. Kazakov
2017-06-25 20:50                             ` Maciej Sobczak
2017-06-26  7:58                               ` Dmitry A. Kazakov
2017-06-26 13:24                                 ` Maciej Sobczak
2017-06-26 16:38                                   ` Dmitry A. Kazakov
2017-06-26 20:42                                     ` Maciej Sobczak
2017-06-24  8:34               ` Maciej Sobczak
2017-06-24 13:06                 ` pythoner6
2017-06-24 15:40                   ` Dmitry A. Kazakov
2017-06-26  0:06                 ` Randy Brukardt
2017-06-26 20:35                   ` Maciej Sobczak
2017-06-26 21:40                     ` Randy Brukardt [this message]
2017-06-27  7:23                       ` Maciej Sobczak
2017-06-27 20:38                         ` Randy Brukardt
2017-06-28  8:21                           ` Dmitry A. Kazakov
2017-06-28 20:50                             ` Randy Brukardt
2017-06-28 23:18                               ` Nasser M. Abbasi
2017-06-29  7:27                                 ` Dmitry A. Kazakov
2017-06-29 16:24                                 ` Jeffrey R. Carter
2017-06-29 16:51                                   ` Nasser M. Abbasi
2017-07-04 23:40                                   ` Luke A. Guest
2017-07-05  5:29                                     ` J-P. Rosen
2017-07-05 13:49                                       ` Dennis Lee Bieber
2017-07-05 17:49                                     ` Jeffrey R. Carter
2017-06-29 21:46                                 ` darkestkhan
2017-06-29  7:15                               ` Dmitry A. Kazakov
2017-06-30  0:42                                 ` Randy Brukardt
2017-06-30  7:36                                   ` Dmitry A. Kazakov
2017-06-28 13:07                           ` Maciej Sobczak
2017-06-27  7:26                       ` Dmitry A. Kazakov
2017-06-27 20:41                         ` Randy Brukardt
2017-06-28  7:57                           ` Dmitry A. Kazakov
2017-06-27 15:19                     ` AdaMagica
2017-06-27 16:32                       ` Dmitry A. Kazakov
2017-06-28 13:15                       ` Maciej Sobczak
2017-06-28 14:05                         ` AdaMagica
2017-06-29 21:17                           ` Robert A Duff
2017-06-30  7:44                             ` Dmitry A. Kazakov
2017-06-30  7:49                               ` J-P. Rosen
2017-06-30  8:28                                 ` Dmitry A. Kazakov
2017-06-30 10:14                                   ` J-P. Rosen
2017-06-30 10:30                                     ` Dmitry A. Kazakov
2017-06-28 20:53                         ` Randy Brukardt
2017-12-17 16:24             ` Mehdi Saada
2017-12-17 17:27               ` Dmitry A. Kazakov
2017-12-18 23:09                 ` Randy Brukardt
2017-12-19  9:25                   ` Dmitry A. Kazakov
2017-06-21 20:40       ` G.B.
2017-06-21 22:25         ` pythoner6
2017-06-26 11:01     ` Vincent
2017-06-26 11:15       ` Alejandro R. Mosteo
2017-06-26 16:35       ` Pascal Obry
replies disabled

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