From: Stefan.Lucks@uni-weimar.de
Subject: Re: Community Input for the Maintenance and Revision of the Ada Programming Language
Date: Fri, 11 Aug 2017 09:57:25 +0200
Date: 2017-08-11T09:57:25+02:00 [thread overview]
Message-ID: <alpine.DEB.2.20.1708110924130.23919@debian> (raw)
In-Reply-To: <omjiao$uqh$1@dont-email.me>
[-- Attachment #1: Type: text/plain, Size: 2948 bytes --]
>> Speaking of evil, anonymous types are evil. Why is it hard to declare a
>> record type for this purpose?
>
> A record is mutable, a tuple isn't meant to be mutable
> (i.e., can't update it's components).
I don't think, supporting function returning ad-hoc anonymous tuples would
strengthen Ada's stand as a language well-suited for safe and secure
systems. Anonymous types are bad in that area, anyway.
If you want tuples, then it would be a lot more consistent to actually
propose the introduction of tuples (i.e., constant records) into the Ada
type system, e.g.,
type May_Be_Integer(Valid: Boolean := True) is constant record
case Valid is
when True => Value: Integer;
when False => null;
end case;
end record;
type Numeric(Is_Float: Boolean := True) is constant record
case Is_Float is
when True => F: Float;
when False => I: Integer;
end case;
end record;
Then you can the kind of functions you are requesting:
function Calculate(A, B, C: Integer; D, E, F: Float) return Numeric;
-- returns either Integer or Float
but you can also deal with such tuples in a really consistent way. This
could look about as follows:
Not_An_Int: May_Be_Integer(False);
function May_Be(I: Integer) return May_Be_Integer is
(May_Be_Integer(Value => I));
function "+"(A, B: May_Be_Integer) return May_Be_Integer is
begin
if A.Valid and B.Valid then
return A.Value + B.Value;
else
return Not_An_Int;
end;
end "+";
function "*"(A, B: May_Be_Integer) return May_Be_Integer is
begin
if A.Valid and then A.Value = 0 then
return 0;
elsif B.Valid and then B.Value = 0 then
return 0;
elsif A.Valid and B.Valid then
return A.Value * B.Value
else
return Not_An_Int;
end;
end "*";
function "-"(A, B: May_Be_Integer) return May_Be_Integer is ...
function "/"(A, B: May_Be_Integer) return May_Be_Integer is ...
At a first look, this may appear like a convoluted approach to evaluate
integer expressions, replacing exceptions by Not_An_Int. But consider an
expression like
May_Be(1) + (May_Be(2) / May_Be(0)) * May_Be(0)
This expression will evaluate to 1, while the corresponding integer
expression
1 + (2/0) * 0
will raise an exception. If there is a chance for errors to cancel out,
as in my definition of "*", then integers with error markers are a good
approach, and exceptions will complicate things a lot.
And yes, I know that my multiplication for May_Be_Integer does not match
mathematical conventions.
Stefan
-------- I love the taste of Cryptanalysis in the morning! --------
www.uni-weimar.de/de/medien/professuren/mediensicherheit/people/stefan-lucks
----Stefan.Lucks (at) uni-weimar.de, Bauhaus-Universität Weimar, Germany----
next prev parent reply other threads:[~2017-08-11 7:57 UTC|newest]
Thread overview: 228+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-03 5:45 Community Input for the Maintenance and Revision of the Ada Programming Language Randy Brukardt
2017-08-03 12:06 ` Lucretia
2017-08-03 12:52 ` Lucretia
2017-08-09 21:08 ` Luke A. Guest
2017-08-09 21:12 ` Luke A. Guest
2017-08-10 14:43 ` Lucretia
2017-08-10 15:14 ` Dmitry A. Kazakov
2017-08-11 1:27 ` Randy Brukardt
2017-08-11 1:24 ` Randy Brukardt
2017-08-11 5:54 ` G.B.
2017-08-10 5:41 ` G.B.
2017-08-10 14:41 ` Lucretia
2017-08-10 15:25 ` J-P. Rosen
2017-08-10 15:42 ` Luke A. Guest
2017-08-10 15:44 ` Dmitry A. Kazakov
2017-08-11 0:56 ` Randy Brukardt
2017-08-11 1:10 ` Randy Brukardt
2017-08-11 22:43 ` Shark8
2017-08-12 2:40 ` Luke A. Guest
2017-08-11 14:42 ` Justin Sq
2017-08-11 14:48 ` jsquirek
2017-08-11 17:10 ` Luke A. Guest
2017-08-11 17:24 ` Justin Sq
2017-08-11 20:09 ` Dmitry A. Kazakov
2017-08-11 21:13 ` Randy Brukardt
2017-08-18 21:06 ` Robert Eachus
2017-08-31 0:49 ` Randy Brukardt
2017-08-31 7:36 ` Jacob Sparre Andersen
2017-08-31 9:52 ` Dmitry A. Kazakov
2017-08-31 12:49 ` Jacob Sparre Andersen
2017-08-31 13:16 ` Dmitry A. Kazakov
2017-08-31 14:09 ` Jacob Sparre Andersen
2017-08-31 14:41 ` Dmitry A. Kazakov
2017-08-31 15:45 ` Simon Wright
2017-08-31 16:08 ` Dmitry A. Kazakov
2017-08-31 18:51 ` Georg Bauhaus
2017-08-31 23:54 ` Randy Brukardt
2017-09-01 3:51 ` Justin Sq
2017-09-01 7:24 ` Dmitry A. Kazakov
2017-09-01 12:23 ` jsquirek
2017-09-03 1:17 ` Randy Brukardt
2017-08-18 20:33 ` Robert Eachus
2017-08-19 1:24 ` Shark8
2017-08-19 8:55 ` Dmitry A. Kazakov
2017-08-19 16:38 ` Shark8
2017-08-19 17:09 ` Dmitry A. Kazakov
2017-08-22 6:02 ` Robert Eachus
2017-08-22 7:34 ` Dmitry A. Kazakov
2017-08-26 4:41 ` Robert Eachus
2017-08-26 6:29 ` Dmitry A. Kazakov
2017-08-26 7:16 ` Jacob Sparre Andersen
2017-08-26 7:48 ` Dmitry A. Kazakov
2017-08-27 12:03 ` Robert Eachus
2017-08-27 12:35 ` Dmitry A. Kazakov
2017-08-27 14:44 ` Dennis Lee Bieber
2017-08-27 16:32 ` Dmitry A. Kazakov
2017-08-19 8:47 ` Dmitry A. Kazakov
2017-08-10 12:18 ` J-P. Rosen
2017-08-10 12:40 ` Lucretia
2017-08-10 15:17 ` J-P. Rosen
2017-08-11 8:33 ` AdaMagica
2017-08-10 16:28 ` Pascal Obry
2017-08-10 16:52 ` Dmitry A. Kazakov
2017-08-10 17:08 ` Luke A. Guest
2017-08-10 17:25 ` Dmitry A. Kazakov
2017-08-11 1:02 ` Lucretia
2017-08-11 6:08 ` Dmitry A. Kazakov
2017-08-11 20:51 ` Randy Brukardt
2017-08-10 17:06 ` Luke A. Guest
2017-08-11 1:31 ` Randy Brukardt
2017-08-11 6:24 ` G.B.
2017-08-11 7:57 ` Stefan.Lucks [this message]
2017-08-11 8:34 ` Dmitry A. Kazakov
2017-08-11 8:53 ` Stefan.Lucks
2017-08-11 9:12 ` Dmitry A. Kazakov
2017-08-11 9:22 ` AdaMagica
2017-08-12 18:29 ` Jacob Sparre Andersen
2017-08-29 16:01 ` Alejandro R. Mosteo
2017-08-09 15:24 ` Johan Söderlind Åström
2017-08-09 17:23 ` Shark8
2017-08-09 18:49 ` Dmitry A. Kazakov
2017-08-31 6:59 ` Jacob Sparre Andersen
2017-08-28 23:49 ` faryumg
2017-08-29 8:17 ` Simon Wright
2017-08-31 13:35 ` Johan Söderlind Åström
2017-09-02 10:49 ` Vincent DIEMUNSCH
2017-09-02 11:04 ` Dmitry A. Kazakov
2017-09-02 11:21 ` Johan Söderlind Åström
2017-09-02 15:22 ` Vincent DIEMUNSCH
2017-09-02 17:19 ` Jeffrey R. Carter
2017-09-04 20:52 ` Johan Söderlind Åström
2017-09-03 1:30 ` Randy Brukardt
2017-09-06 15:02 ` Johan Söderlind Åström
2017-09-06 15:57 ` Jacob Sparre Andersen
2017-09-06 18:56 ` Johan Söderlind Åström
2017-09-06 21:21 ` Randy Brukardt
2017-09-08 21:04 ` Johan Söderlind Åström
2017-09-08 21:46 ` Dmitry A. Kazakov
2017-09-08 23:55 ` Johan Söderlind Åström
2017-09-16 12:49 ` Johan Söderlind Åström
2017-09-16 13:10 ` Dmitry A. Kazakov
2017-09-17 11:05 ` AdaMagica
2017-09-17 12:51 ` Dmitry A. Kazakov
2017-09-08 22:13 ` Jeffrey R. Carter
2017-09-10 21:09 ` Johan Söderlind Åström
[not found] ` <9d4274d7-5ad1-42d0-8ec3-de822e28ec6c@googlegroups.com>
2017-10-02 19:01 ` Randy Brukardt
2017-09-08 23:07 ` Randy Brukardt
2017-09-09 20:35 ` Johan Söderlind Åström
2017-10-02 18:57 ` Randy Brukardt
2017-09-09 14:48 ` G.B.
2017-09-03 1:35 ` Randy Brukardt
2017-09-03 10:32 ` Alejandro R. Mosteo
2017-09-03 12:59 ` Dmitry A. Kazakov
2017-09-05 22:25 ` Randy Brukardt
2017-09-05 22:29 ` Randy Brukardt
2017-09-02 16:49 ` Jeffrey R. Carter
2017-09-03 10:34 ` Alejandro R. Mosteo
2017-09-02 17:08 ` Jeffrey R. Carter
2017-09-06 16:38 ` Vincent DIEMUNSCH
2017-09-06 20:52 ` Egil H H
2017-09-06 21:30 ` Randy Brukardt
2017-09-08 15:49 ` Jeffrey R. Carter
2017-09-03 1:28 ` Randy Brukardt
2017-09-06 6:15 ` Shark8
2017-09-01 14:11 ` Björn Lundin
2017-09-01 14:47 ` J-P. Rosen
2017-09-01 16:02 ` Dmitry A. Kazakov
2017-09-01 17:53 ` Jacob Sparre Andersen
2017-09-01 18:06 ` J-P. Rosen
2017-09-01 19:02 ` Dmitry A. Kazakov
2017-09-03 1:22 ` Randy Brukardt
2017-09-11 18:49 ` Tarjei Jensen
2017-09-11 19:33 ` Dmitry A. Kazakov
2017-09-12 6:18 ` Tarjei Jensen
2017-09-12 6:38 ` gautier_niouzes
2017-09-12 7:02 ` Tarjei Jensen
2017-09-12 7:15 ` Dmitry A. Kazakov
2017-09-12 7:35 ` Simon Wright
2017-09-12 9:23 ` J-P. Rosen
2017-09-12 10:07 ` Dmitry A. Kazakov
2017-09-12 16:30 ` Shark8
2017-09-12 16:58 ` Dmitry A. Kazakov
2017-09-12 19:30 ` J-P. Rosen
2017-09-12 19:53 ` Dmitry A. Kazakov
2017-09-12 10:44 ` gautier_niouzes
2017-09-12 6:39 ` Egil H H
2017-09-12 7:02 ` Tarjei Jensen
2017-09-12 7:42 ` Egil H H
2017-09-12 8:24 ` Tarjei Jensen
2017-09-12 8:35 ` Dmitry A. Kazakov
2017-09-12 9:21 ` Egil H H
2017-09-12 10:22 ` Dmitry A. Kazakov
2017-09-12 10:48 ` Egil H H
2017-09-12 12:09 ` Dmitry A. Kazakov
2017-09-12 12:56 ` Egil H H
2017-09-12 13:14 ` Dmitry A. Kazakov
2017-09-12 13:25 ` Egil H H
2017-09-12 13:43 ` Dmitry A. Kazakov
2017-09-12 14:07 ` Egil H H
2017-09-12 15:59 ` Dmitry A. Kazakov
2017-09-12 14:36 ` Egil H H
2017-09-12 15:55 ` Dmitry A. Kazakov
2017-09-12 16:15 ` Egil H H
2017-09-12 16:40 ` Dmitry A. Kazakov
2017-09-12 16:47 ` Egil H H
2017-09-12 16:59 ` Dmitry A. Kazakov
2017-09-12 17:03 ` Egil H H
2017-09-12 17:17 ` Dmitry A. Kazakov
2017-09-12 17:29 ` Egil H H
2017-09-12 19:14 ` Dmitry A. Kazakov
2017-09-12 19:58 ` Egil H H
2017-09-13 7:24 ` Dmitry A. Kazakov
2017-09-13 8:13 ` Egil H H
2017-09-13 8:57 ` Dmitry A. Kazakov
2017-09-13 9:00 ` Egil H H
2017-09-12 18:55 ` Simon Wright
2017-09-12 17:43 ` Jeffrey R. Carter
2017-09-13 13:07 ` Alejandro R. Mosteo
2017-09-13 16:34 ` Jeffrey R. Carter
2017-09-13 18:34 ` Egil H H
2017-09-13 19:41 ` Jeffrey R. Carter
2017-09-14 12:30 ` Alejandro R. Mosteo
2017-09-14 13:36 ` J-P. Rosen
2017-09-14 18:08 ` Jeffrey R. Carter
2017-10-02 19:53 ` Randy Brukardt
2017-09-12 14:55 ` Simon Wright
2017-09-12 16:04 ` Dmitry A. Kazakov
2017-10-02 19:51 ` Randy Brukardt
2017-10-03 7:48 ` Simon Wright
2017-10-03 9:34 ` G.B.
2017-10-03 10:11 ` Dmitry A. Kazakov
2017-10-03 13:25 ` G.B.
2017-10-03 13:56 ` Dmitry A. Kazakov
2017-10-03 20:24 ` Randy Brukardt
2017-10-03 20:20 ` Randy Brukardt
2017-10-02 19:45 ` Randy Brukardt
2017-09-12 17:41 ` Jeffrey R. Carter
2017-09-12 21:04 ` G.B.
2017-09-13 7:30 ` Dmitry A. Kazakov
2017-09-13 17:39 ` G.B.
2017-09-13 19:34 ` Dmitry A. Kazakov
2017-09-14 6:57 ` G.B.
2017-09-14 7:33 ` Dmitry A. Kazakov
2017-10-02 10:06 ` reinert
2017-10-02 13:54 ` Jeffrey R. Carter
2017-10-02 14:56 ` reinert
2017-10-02 14:56 ` Dennis Lee Bieber
2017-10-02 15:02 ` G.B.
2017-10-02 16:23 ` reinert
2017-10-02 16:38 ` Dmitry A. Kazakov
2017-10-02 17:19 ` reinert
2017-10-02 17:39 ` Dmitry A. Kazakov
2017-10-02 19:10 ` Jeffrey R. Carter
2017-10-02 19:14 ` Jeffrey R. Carter
2017-10-03 3:30 ` reinert
2017-10-03 6:36 ` G.B.
2017-10-04 19:21 ` reinert
2017-10-04 19:33 ` Dmitry A. Kazakov
2017-10-04 21:45 ` G.B.
2017-10-04 22:04 ` Dmitry A. Kazakov
2017-10-05 6:50 ` G.B.
2017-10-05 7:21 ` Dmitry A. Kazakov
2017-10-04 12:38 ` Daniel Norte Moraes
-- strict thread matches above, loose matches on Subject: below --
2017-08-03 5:53 Randy Brukardt
2017-08-03 9:42 ` Dirk Craeynest
2017-08-03 9:52 ` Dirk Craeynest
2017-08-05 0:10 ` Randy Brukardt
2017-08-03 12:52 laguest9000
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox