comp.lang.ada
 help / color / mirror / Atom feed
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.



  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