From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Ada Annoyances
Date: Mon, 18 Dec 2017 17:09:40 -0600
Date: 2017-12-18T17:09:40-06:00 [thread overview]
Message-ID: <p19hrl$vf5$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: p169d9$6ka$1@gioia.aioe.org
"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
news:p169d9$6ka$1@gioia.aioe.org...
> On 2017-12-17 17:24, Mehdi Saada wrote:
>> So, some of you think the stupidity is on the side of certain
>> customers, to ban tagged types as a whole, as objetively there is no
>> added cost when we don't use 'Class types ? Rather than on the language
>> designers', for tagging controlled type and cursor etc by default ?
>> Can someone answer simply, if there is or not, really no difference
>> (save for some more bits for the tag) between regular records types and
>> tagged types, when not using class types ?
>
> There is a huge difference even without class-wide objects. Some things
> from the top:
>
> 1. You can derive a new type from a tagged type, which you cannot do from
> a non-tagged type
I think you are using a non-Ada meaning of "derive" here, since an Ada
derived type works for all types.
> 2. You can clone a non-tagged type, which you cannot do with a tagged
> type.
No idea what this means. You certainly can use a null extension on a tagged
type, and that operates pretty much the same as a non-tagged type.
> 3. The meaning of abstract operations like
>
> procedure Foo (X : T) is abstract;
>
> for tagged and non-tagged types is totally different
Right.
> 4. Type polymorphism is still available for tagged types without
> class-wide objects as you can have generic formal parameters:
>
> generic
> type X is new Y with private;
You can do this for untagged types as well (without the "with private"
part), it's just not very useful.
> 5. You can inherit operations of tagged types.
All derived types inherit operations. That's why the Ada 95 design used
derivation rather than a new type construct to implement OOP.
> 6. You cannot declare certain operation signatures with tagged types due
> to multiple-dispatch issues.
Right. But this is a subset of 9.
> 7. Declaration of tagged types are subject of freezing rules.
All types are subject to freezing rules; perhaps you meant that the
*operations* of a tagged type are also subject to freezing rules.
> 8. Visibility of primitive operations is radically different. You can
> reach primitive operation even if they are not visible.
You mean that prefix notation is allowed (and it has different visibility
rules). Otherwise, the visibilty rules are the same for all types, annoying
as that can be.
I think this one follows from the OPs original comment.
> 9. Certain signatures behave differently if arguments are tagged, e.g.
> when several arguments are controlled the tags must be same.
Right, 6 is a subset of this one, in that there can be only one tag, and a
number of rules are used to enforce that.
======================
I read the original question as to whether the *representation* of a tagged
type is essentially the same as an untagged record type. And the answer to
that is that, yes, in most cases, a tagged type is just a record type with
an extra "tag" component. Unless there are going to be a very large number
of objects of a type, the extra cost of a tagged type is insignificant.
The Ada 95 designers considered tagged types to be "records done right", and
thus the different rules for them. Most of the differences are improvements
(and at least one has been applied to all records in more recent Ada
versions -- the equality rules). I wouldn't worry about declaring a type
tagged unless there were likely to be thousands of objects of it being
created.
Controlled types might be more expensive, depending upon how they are
implemented. If a chaining implementation is used, then there are extra
components which have to be managed. That might happen even for a mostly
static implementation (there still are cases like allocated objects that
have to be managed dynamically). So I'd be a bit more cautious with those,
but again it only would matter if there are a lot of objects getting created
and destroyed.
Randy.
next prev parent reply other threads:[~2017-12-18 23:09 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
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 [this message]
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