comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Ada case-statement
Date: Thu, 15 Mar 2018 09:37:46 +0100
Date: 2018-03-15T09:37:46+01:00	[thread overview]
Message-ID: <p8dbcp$11bc$1@gioia.aioe.org> (raw)
In-Reply-To: p8cagc$7fb$1@franka.jacob-sparre.dk

On 15/03/2018 00:16, Randy Brukardt wrote:

> declare
>    Selector : Day_Type renames Calculate_Day;
>    subtype Weekend_Subtype is Day_Type range Sat .. Sun;
>       -- Or use a static predicate if the range is discontiguous.
> begin
>    case Selector is
>        when Mon .. Fri =>
>           ...
>        when  Sat | Sun =>
>           ...
>           case Weekend_Subtype'(Selector) is -- A type conversion works, too.
>              when Sat =>
>                 ...
>              when Sun =>
>                 ...
>           end case;
>     end case;
> end;

Ugh, that could be a source quite intractable bugs. If so, I use this 
pattern time to time then:

declare
    Selector : Day_Type renames Calculate_Day;
    subtype Weekend_Subtype is Day_Type range Sat .. Sun;
begin
    case Selector is
      when Mon .. Fri =>
         ...
      when Weekend_Subtype =>
         ...
         case Weekend_Subtype'(Selector) is
            when Sat =>
               ...
            when Sun =>
               ...
         end case;
   end case;

And this does not work with

    when Odd_Week_Day : Mon | Wed | Fri =>

> Personally, I don't like declarations without explicit subtypes, as the
> subtype of an object is critical for understanding the semantics. Not having
> the subtype in the source makes it much harder to understand the semantics.

Huh, it is definitely true for types, but Ada subtypes are designed for 
exactly the opposite. On many occasions people here argued that Ada 
subtype is not a type. Well, from that point of view it must have 
exactly the same semantics as its base. What's is there to understand more?

> Expanding the "id :" notation would definitely harm understandability of Ada
> code, and with readability being pretty much the first priority for Ada
> syntax, that's a bad thing.

I don't see how giving a name could add anything to the semantics. Each 
alternative exhaustively defines a constraint. No reason to contaminate 
the name space.

> We have been considering making the subtype name in an object renames
> optional -- the subtype is a lie anyway (since it is ignored semantically),
> and other important properties of the renamed object like "constant" are
> omitted. That's about as far as I will go for typeless declarations (and
> perhaps even that is too far).

Yes, subtype specification in renaming is a noise, and a dangerous one, 
because it whispers lies as the language does nothing in order to 
enforce it or at least to check conformance to the constraints stated by 
it. Certainly, if the present semantics of renaming to stay, the subtype 
name *must* be removed for the sake of clarity and safety.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  parent reply	other threads:[~2018-03-15  8:37 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-14 17:35 Ada case-statement Stephen Davies
2018-03-14 17:49 ` Dmitry A. Kazakov
2018-03-15  0:57   ` Robert I. Eachus
2018-03-15  3:10     ` Dan'l Miller
2018-03-15  5:54       ` J-P. Rosen
2018-03-15  7:56         ` Niklas Holsti
2018-03-15 12:21           ` Dan'l Miller
2018-03-15 17:22             ` Mill processor (Was: Re: Ada case-statement) Niklas Holsti
2018-03-15 21:50     ` Ada case-statement Randy Brukardt
2018-03-14 22:22 ` Mehdi Saada
2018-03-14 23:16 ` Randy Brukardt
2018-03-15  5:04   ` gautier_niouzes
2018-03-15  7:50   ` Jacob Sparre Andersen
2018-03-15 22:05     ` Randy Brukardt
2018-03-15  8:37   ` Dmitry A. Kazakov [this message]
2018-03-15 22:20     ` Randy Brukardt
2018-03-16  8:54       ` Dmitry A. Kazakov
2018-03-16 23:49         ` Randy Brukardt
2018-03-17  7:59           ` Dmitry A. Kazakov
2018-03-15 15:37   ` Stephen Davies
2018-03-15 16:33     ` J-P. Rosen
2018-03-15 17:01       ` Dmitry A. Kazakov
2018-03-15 18:41         ` Shark8
2018-03-15 21:12           ` Jeffrey R. Carter
2018-03-18  5:41             ` Robert I. Eachus
2018-03-18  6:57               ` Spiros Bousbouras
2018-03-18  9:17               ` Jeffrey R. Carter
2018-03-18 12:53                 ` Simon Wright
2018-03-15 18:50     ` Jere
2018-03-15 20:40       ` Anh Vo
2018-03-15 22:24     ` Randy Brukardt
2018-03-16  9:53       ` Stephen Davies
2018-04-03 17:56   ` marciant
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox