comp.lang.ada
 help / color / mirror / Atom feed
From: Optikos <optikos@verizon.net>
Subject: Re: Is this a bug?
Date: Tue, 31 Dec 2019 11:40:12 -0800 (PST)
Date: 2019-12-31T11:40:12-08:00	[thread overview]
Message-ID: <d770cfc3-0d99-4b4f-af61-22e9ec849ba7@googlegroups.com> (raw)
In-Reply-To: <que0g1$5rn$1@franka.jacob-sparre.dk>

On Monday, December 30, 2019 at 5:16:19 PM UTC-6, Randy Brukardt wrote:
> "Niklas Holsti" wrote in message 
> news:h6uum4F2481U1@mid.individual.net...
> > On 2019-12-30 19:51, Anh Vo wrote:
> >> On Monday, December 30, 2019 at 7:44:37 AM UTC-8, reinert wrote:
> >>> Hello,
> >>>
> >>> assume the following Ada procedure:
> >>> ------------------------------------------------------------------------------
> >>> with Text_IO;
> >>> procedure test1 is
> >>> package test_package is
> >>>   type rec1_t is tagged record
> >>>     a : integer := 2;
> >>> -- b : integer := 2;
> >>>   end record;
> >>>   function a(x : rec1_t) return integer is (3);
> >>>   rec1 : rec1_t;
> >>> end test_package;
> >>> begin
> >>>    Text_IO.Put(" test_package.rec1: " & 
> >>> integer'image(test_package.rec1.a));
> >>> end test1;
> >>> -------------------------------------------------------------------------------
> >>>
> >>> It gives (for mye computer):
> >>>
> >>> test_package.rec1:  2
> >>>
> >>> If I change the statement
> >>>
> >>> "a : integer := 2;"
> >>>
> >>> to
> >>>
> >>> "b : integer := 2;"
> >>>
> >>> then I get:
> >>>
> >>> test_package.rec1:  3
> >>>
> >>> Is this reasonable?  Bug?
> >>>
> >>> reinert
> >>
> >> No, the compiler behaves correctly. In fact, if tagged record is
> >> replaced by record, the latter case will be rejected.
> >
> > Yes.
> >
> > When rec1_t is tagged, the "selected component" text "test_package.rec1.a" 
> > could refer either to the rec1_t-component "a" or to the subprogram 
> > (function) "a". In RM 4.1.3(9.1/2) and RM 4.1.3(9.2/3), the latter case is 
> > available only under the condition that the tagged record type (rec1_t) 
> > does not have a (visible) component with the name "a". This means that the 
> > ambiguity is resolved in favour of the component "a", which has the value 
> > 2.
> >
> > One could ask, why is such an ambiguity not rejected (made illegal)? 
> > Probably because such an illegality rule would have made many illegal many 
> > Ada programs that were legal before the introduction of the 
> > "object.operation" syntax for tagged-record objects.
> 
> The other reason is that there isn't any alternative notation available for 
> components, whereas there is an alternative method for function calls. Ergo, 
> we assume that you mean a component if both are available -- otherwise, it 
> would be impossible to access a component at all if there is a function with 
> the same name visible. Since that function wouldn't even have to be in the 
> same scope, there would be a significant maintainance hazard.
> 
> Moral: This is another reason to make everything a private type (and also to 
> not use prefixed notation with types that aren't private).

Another moral to the story:
This is a reason for language designers to not import some other language's syntax in •verbatim• (in Ada95) just because all the cool OO kids were doing member-dot syntax (during the late-1980s & 1990s).  Perhaps a quite-visual multi-character token would have been better (e.g., dot-colon .: as a metaphor for zoom-in magnification or colon-dot :. for drill-down to a part within the whole).  Or perhaps tilde (~) or commercial-at (@) or back-tick (`) would have been better, if a single-character token was the only option.


  reply	other threads:[~2019-12-31 19:40 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-30 15:44 Is this a bug? reinert
2019-12-30 17:51 ` Anh Vo
2019-12-30 18:41   ` Niklas Holsti
2019-12-30 19:50     ` reinert
2019-12-30 20:11       ` Dmitry A. Kazakov
2019-12-30 23:16     ` Randy Brukardt
2019-12-31 19:40       ` Optikos [this message]
2019-12-31 21:50         ` Randy Brukardt
2020-01-02  9:34           ` Dmitry A. Kazakov
2020-01-03  7:26             ` reinert
2020-01-03  7:35             ` reinert
2020-01-03  8:37               ` Dmitry A. Kazakov
2020-01-04  0:42                 ` Randy Brukardt
2020-01-05 13:32                   ` reinert
2020-01-06 10:43                     ` J-P. Rosen
2020-01-06 12:19                       ` Tero Koskinen
2020-01-17  9:54                 ` reinert
2020-01-17 10:08                   ` Dmitry A. Kazakov
2020-01-17 22:14                   ` Randy Brukardt
2019-12-31  6:08     ` J-P. Rosen
  -- strict thread matches above, loose matches on Subject: below --
2004-09-23  0:52 Wojtek Narczynski
2004-09-23  8:35 ` Wojtek Narczynski
2004-09-23 14:52   ` Nick Roberts
2004-09-23 22:26     ` Brian May
2004-09-24  0:28       ` Stephen Leake
2004-09-24  0:57         ` Jeffrey Carter
2004-09-24 12:47         ` Wojtek Narczynski
2004-09-25  0:17           ` Brian May
2004-09-24 12:37       ` Wojtek Narczynski
2004-09-23 11:27 ` Jeff C r e e.m
2004-09-24  0:30   ` Stephen Leake
2004-09-24  1:49     ` Jeff C r e e.m
2004-09-25 12:59       ` Stephen Leake
2004-10-04 16:36         ` Warren W. Gay VE3WWG
replies disabled

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