From: Robert A Duff <bobduff@TheWorld.com>
Subject: Re: Ada Annoyances
Date: Wed, 05 Jul 2017 16:03:47 -0400
Date: 2017-07-05T16:03:47-04:00 [thread overview]
Message-ID: <wccshiahcrg.fsf@TheWorld.com> (raw)
In-Reply-To: es28mfFqanaU2@mid.individual.net
Niklas Holsti <niklas.holsti@tidorum.invalid> writes:
> (Apologies for a delayed reply.)
No need to apologize. I certainly only pay attention to
comp.lang.ada occasionally.
> 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.
I would use it even in nonembedded systems.
I don't buy the idea that just because some of one's embedded code
needs to be nonportable/low-level, it's OK to force other stuff
to be, when it's not logically necessary.
If you're not interfacing with external hardware or similar,
the compiler should compute record layouts/sizes.
>> 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.
If it can warn about too-large max size, then it can compute the
max size for you. Yes, it has to be a global analysis.
Too-small max size is easy -- that can be done at compile
time for each type.
> 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.
Well, if you implemented this feature in GNAT, you'd be proven right.
I don't think AdaCore is going to spend time on it any time soon.
> Some compilers already support stack-size analysis, which is a similar
> global analysis.
Yes. ARG has always shied away from requiring such things.
> 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.
OK.
>> 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.
But root types are usually abstract.
>> 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?
Quite easy:
Uninit : Integer;
X : Some_Record (Discrim => Uninit);
In a simple case like that, compilers likely warn.
But it's not hard to hide the uninitialized variable
from the compiler. E.g. a component of a heap-allocated
record -- compilers can't warn about that, because it
would cause too many false positives.
- Bob
next prev parent reply other threads:[~2017-07-05 20:03 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 [this message]
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