From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Ada Annoyances
Date: Fri, 23 Jun 2017 22:22:03 +0300
Date: 2017-06-23T22:22:03+03:00 [thread overview]
Message-ID: <er582rF2ppoU1@mid.individual.net> (raw)
In-Reply-To: <oijkah$mnh$1@franka.jacob-sparre.dk>
On 17-06-23 20:49 , Randy Brukardt wrote:
> <raph.amiard@gmail.com> wrote in message
> news:be1619b4-2220-4287-8e67-1af32377d3f7@googlegroups.com...
> ...
>> Ada forcing tagged types on you to use certain features *is* a
>> problem, if only because certain Ada users are forbidden to
>> use tagged types altogether and thus are prevented to use a
>> lot of useful features.
>
> Stupid language usage rules are not the problem of the language design,
> they're a management problem.
Sometimes usage rules are imposed by environment constraints, in
particular limited resources in smallish embedded systems, combined with
reliability requirements which mean that running out of resources at run
time must be avoided.
> I can understand banning T'Class (thus banning
> dynamic dispatching) and banning controlled types (thus banning hidden calls
> that can be harder to analyze), but not banning tagged types themselves.
I have so far avoided using tagged types in my embedded applications
because they indeed hamper the discovery of resource usage (execution
time and stack space) by static analysis, as you said.
There are two reasons why tagged types hamper such analysis:
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.
Point (a) can be worked around: static analysis tools usually let the
analyst specify the possible set of callees for a "dynamic call" (of
which dispatching calls are one kind) and the analysis can then
encompass all those callees. (Alternatively, the analysis tool can
extract the class hierarchy from the debugging information, and itself
discover the possible callees.)
Point (b) is more difficult and I know of no work-around that can be
applied at analysis time.
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;
type Child is new Root with record ... end record;
-- The compiler checks that Child'Size is at most 128 bits, and
-- rejects the program otherwise.
It would now be legal to create statically sized data structures using
Root'Class, without dynamic memory allocation, by allocating 128 bits
for each value of type Root'Class:
type Object_List is array (List_Index) of Root'Class;
type Object_Pair is record
A, B : Root'Class;
end record;
and so on.
With this extension, or some other means to solve point (b), I would
start using tagged types in embedded SW. For example, I have a major SW
component, used in several projects, which simulates a class hierarchy
with variant records and case statements. This component would be
greatly improved by using a tagged type instead, but it would need data
structures with class-wide components of static (maximum) size.
What do people think of a Maximum_Size aspect? Should I consider writing
a formal suggestion to ada-comment?
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2017-06-23 19:22 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 [this message]
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