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.
next prev parent 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