comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Ada Annoyances
Date: Sun, 2 Jul 2017 19:04:54 -0500
Date: 2017-07-02T19:04:54-05:00	[thread overview]
Message-ID: <ojc1n6$j2f$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: 3df6404a-588d-4e2d-a189-1d1e32ce9f5d@googlegroups.com

(1) Untagged primitive operations can be overridden "late", that causes 
problems for anything that calls them indirectly. Perhaps it could have been 
made to work, but it was more work for a feature that some people thought 
was marginal; probably it would have been dropped rather than getting more 
complicated.

(2) Iteration is defined in terms of an interface, so by definition it only 
works with tagged types. Perhaps we should have not tried to build on other 
language features and just made iteration magic all the way (it certainly 
would have been easier to use that way), but taggedness is a consequence of 
that.

(3) Since prefixed notation does automatic dereferencing and referencing 
(that is, .all and 'Access), allowing it on all types caused levels of 
ambiguity (and potentially infinite regress). It was easier to just define 
it on tagged types, which didn't have those issues. Perhaps it could have 
been made to work, but it was more work for a feature that already had 
significant opposition; probably it would have been dropped rather than 
getting more complicated. (Sound like a broken record??)

Note that for versions of Ada prior to Ada 2012, you have to use tagged 
types if you expect "=" to work right. Untagged record "=" does not compose 
in original Ada. We eventually decided to fix that, but the fix means that 
substantial existing code won't compile with Ada 2012 (most of it didn't do 
what the author intended anyway, so whether that is a bad thing is hard to 
say).

And of course if you need controlled types, you have to use tagged types. If 
you want any type extension (regardless of whether any dispatching or 
inheritance is involved), you have to use tagged types.

So you have to use tagged types in most circumstances in Ada 2012. And given 
that the extra cost is a word or two per object, the overhead is 
insignificant in most cases. (The cases where it matters, tiny non-private 
objects that are used in large quantities, are those for which the missing 
features aren't usable anyway.)

The real problem here is keeping compatibility with the messed-up 
definitions of untagged types in Ada; the most sensible thing to do would be 
to make all types effectively tagged (Dmitry likes to tell everyone how it 
ought to work), but that would be incompatible in many overriding cases. It 
would make more sense for Ada'Succ.

                               Randy.

<pythoner6@gmail.com> wrote in message 
news:3df6404a-588d-4e2d-a189-1d1e32ce9f5d@googlegroups.com...
On Friday, June 30, 2017 at 11:02:48 AM UTC-4, Norman Worth wrote:
> You should not use tagged types where they are not needed.  It messes up
> the code.  In general, if you are not going to have derived types, the
> base type should not be tagged.

In some cases you do not have a choice; this is why I started this thread in 
the first place. If you want to define custom indexing, custom iteration or 
use the object.method() syntax, you must use tagged types, regardless of 
whether or not you really need tagged types. It seems odd to me that you 
must pay an unnecessary cost to use these features just because the language 
says so (perhaps there is a reason behind the decision, but I can't see 
why), even if that cost is small. 


  reply	other threads:[~2017-07-03  0:04 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 [this message]
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
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