comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Ada Annoyances
Date: Tue, 4 Jul 2017 22:30:23 +0300
Date: 2017-07-04T22:30:23+03:00	[thread overview]
Message-ID: <es28mfFqanaU2@mid.individual.net> (raw)
In-Reply-To: <wccinje5wi3.fsf@TheWorld.com>

(Apologies for a delayed reply.)

On 17-06-30 00:12 , Robert A Duff wrote:
> Niklas Holsti <niklas.holsti@tidorum.invalid> writes:
>
>> There are two reasons why tagged types hamper such analysis:
>
> As Randy pointed out, it is more correct to say that class-wide types do
> that.  Tagged types by themselves do not cause these problems.
> Tagged types without class-wide types are not super useful,
> but they are somewhat useful.
>
>> a) dispatching calls (as you said), where the actual callee is
>> determined by run-time values (tags) which are hard to predict by static
>> analysis
>>
>> b) the non-static size of class-wide objects (of type T'Class), which
>> means that the compiler and/or the programmer must use dynamic
>> allocation (usually heap or secondary stack) for such objects.
> ...
>> For some time, I have had in mind a possible Ada extension to solve
>> point (b): an attribute/aspect that would let the programmer set a
>> static upper bound on the size of any object in T'Class. If we call this
>> aspect Maximum_Size (or perhaps Maximum_Size'Class), the programmer
>> could use it like this:
>>
>>    type Root is tagged record ... end record
>>    with Maximum_Size => 128;
>
> Something like that was considered and rejected for Ada 9X.
> Part of the problem is that it seems so low level to be talking
> about sizes.  It's not even portable.

You are right, but this feature would be used only or mainly in embedded 
programs, which usually already contain unportable, low-level stuff: 
task stack sizes, record representation clauses, etc.

> And not maintainable -- if you
> delete a big type, or make it smaller, you're now wasting space.

If the feature would be adopted, I imagine a friendly compiler would (at 
least optionally) tell me that I am wasting space, or that the given 
Maximum_Size is too small, and what would be the minimum valid value (as 
GNAT does now for 'Size clauses that give a too-small size) even if it 
requires some bind-time or link-time global check. That is a 
quality-of-implementation issue.

> It would be better to have the compiler compute the maximum
> size needed.  That  would require the compiler to do a fairly
> global analysis, which is something Ada compilers are not
> set up to do.

Well, the "binder" part of the compilation system does some global 
stuff. And I would not be surprised if link-time "relocation"-type 
computations could be (mis-)used to compute the maximum size of any type 
in a class.

Some compilers already support stack-size analysis, which is a similar 
global analysis.

>>    type Object_List is array (List_Index) of Root'Class;
>>
>>    type Object_Pair is record
>>       A, B : Root'Class;
>>    end record;
>
> Would you allow:
>
>     X : Object_List (1..10);
>     Y : Object_Pair;
>
> ?

I would like to allow that (default initialized components of type 
Root'Class), but I would not much mind having to initialize such 
components explicitly.

> If so, what is the 'Tag of the various components?
> "Undefined" is not a very satisfying answer.

I agree that "undefined" would not be good. The natural answer seems to 
be that the default initial tag is that of the Root type, but then we 
must assume that it is not an abstract type.

> These things are analogous to records with defaulted discriminants.

Yes, that has been my mental model (and it is the implementation used in 
the main SW component that I would like to switch over to class-wide types).

> The language makes some (unsuccessful!) attempt to prevent
> uninitialized discriminants.

Interesting -- I did not know that the attempt is not fully successful. 
Is it easy to explain when the attemp fails?

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .

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