comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Will "renames" increase program size?
Date: Thu, 16 Jun 2011 14:15:23 +0200
Date: 2011-06-16T14:15:23+02:00	[thread overview]
Message-ID: <wkvzuhs63t87.1j91qywfowmtc.dlg@40tude.net> (raw)
In-Reply-To: 4bdd2495-fb00-4aa7-89bd-910dfefa3704@i4g2000yqg.googlegroups.com

On Thu, 16 Jun 2011 03:18:14 -0700 (PDT), AdaMagica wrote:

>> procedure Shame is
>> � �type T is array (Integer range <>) of Integer;
>> � �A : T := (0 => 0, 1 => 1);
>> � �subtype S is T (1..2);
>> � �B : S renames A;
>> begin
>> � �Put_Line (Integer'Image (B (0))); -- Surprise, 0 is a legal index of S!
>> end Shame;
> 
> Yes, agreed, that's annoying and confusing. Perhaps such a renaming
> should be forbidden. Don't know what other consequences such a rule
> would have, which other rules would have to be adapted. Think of
> generics... (I know you dislike generics.)

(:-))

I think it would be difficult to forbid, because renaming that changes view
is extremely useful for tagged types. E.g.

   if X in S'Class then
      declare
         Y : S'Class renames S'Class (X);
      begin

I always wished a cleaner and safer construct for this, then we could
indeed disable renaming to a view altogether.

Luckily, this one is illegal:

   type T is access all Integer;
   subtype S is not null T;
   P1 : T := null;
   P2 : S renames S (P1);

>> Regarding the visibility rules, the design bug is that the new name of a
>> thing shall not hide any other names of it in any context. In the example
>> above P1.End_Error should not have hidden P2.End_Error. (I don't know why
>> this has not been fixed long time ago, because it would be a really minor
>> language change, which would not break any existing code).
> 
> You request that resolution would not be via names, but via entities.
> Thus when there are several homonymes visible at the same time, the
> compiler would have to check whether all these names actually specify
> the same entity.

Yes.

> Don't know whether this would make overload
> resolution more difficult.

Maybe it would not, because the actions need only to be undertaken when a
conflict is detected. Then the compiler would weed the list of conflicting
names of same entities. That should not even slower the compilation
(provided the feature would not be abused).

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



  reply	other threads:[~2011-06-16 12:15 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-15  2:10 Will "renames" increase program size? Adrian Hoe
2011-06-15  5:37 ` Randy Brukardt
2011-06-15  9:11   ` AdaMagica
2011-06-15 11:26     ` Yannick Duchêne (Hibou57)
2011-06-15 11:24   ` Yannick Duchêne (Hibou57)
2011-06-15 13:15     ` Dmitry A. Kazakov
2011-06-16  6:59       ` AdaMagica
2011-06-16  8:59         ` Dmitry A. Kazakov
2011-06-16 10:18           ` AdaMagica
2011-06-16 12:15             ` Dmitry A. Kazakov [this message]
2011-06-16 23:22             ` Randy Brukardt
2011-06-16 15:40           ` Adam Beneschan
2011-06-16 16:33             ` Dmitry A. Kazakov
2011-06-16 17:42               ` Adam Beneschan
2011-06-16 18:53                 ` Dmitry A. Kazakov
2011-06-16 23:39                   ` Randy Brukardt
2011-06-17  6:53                     ` Dmitry A. Kazakov
2011-06-18  0:02                       ` Randy Brukardt
2011-06-18  7:54                         ` Dmitry A. Kazakov
2011-06-18  8:58                           ` Yannick Duchêne (Hibou57)
2011-06-18 10:05                             ` Dmitry A. Kazakov
2011-06-18 12:49                               ` Yannick Duchêne (Hibou57)
2011-06-18 22:44                           ` Randy Brukardt
2011-06-22  0:56                             ` Shark8
2011-06-15 22:21 ` anon
replies disabled

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