comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Private extension of a synchronized interface
Date: Mon, 18 Feb 2019 16:35:13 -0600
Date: 2019-02-18T16:35:13-06:00	[thread overview]
Message-ID: <q4fbv1$2pq$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: fd975d66-8e70-4e86-8a75-efc6061ef25c@googlegroups.com

"Jere" <jhb.chat@gmail.com> wrote in message 
news:fd975d66-8e70-4e86-8a75-efc6061ef25c@googlegroups.com...
> I'll get to my ultimate goal later, but while following various
> rabbit trails, I came across a situation I couldn't solve.  GNAT
> allows you to make private extensions to synchronized interfaces
> and it allows you to complete those private extensions with
> protected types.  I can't, however, figure out how it overrides
> the abstract procedures and functions of the synchronized interface.
>
> If I don't specify an override and try to call the procedure, it complains
> that the procedure is abstract.

This appears to be a GNAT bug, although I'm not 100% certain.

When you inherit abstract routines for a concrete type, the routines 
"require overriding" routines. (Se 3.9.3(6/4). Such routines have to be 
overridden (somewhere), which can happen in the private part. And the 
ultimate routine should be treated as concrete - that is, you should be able 
to call it.

Since your private extension doesn't include the keyword "abstract", that 
makes the routines "shall be overridden". So I think this is a GNAT bug.

Almost everyone (and every compiler) confuses inheriting abstract 
subprograms with subprograms that require overriding; I know that the 
terminology and requirements were different in early Ada 9x, but why current 
compilers continue that mistake is a mystery to me.

The reason I don't say this for 100% certain is that "implemented by" is not 
exactly the same as "overriding" (for reasons that have nothing to do with 
this issue), and it's not clear to me that the 3.9.3(6) rule actually allows 
"implemented by". But, it's clear that the intent is that these are 
equivalent in such cases, and if someone disagress, I'd expect the ARG to 
take it up and fix the language.

What I'd suggest in this case is to create a self-testing example as a 
potential ACATS test. I'd guess that a case like this doesn't happen in the 
ACATS, but this a fundemental enough capabilitity that is makes sense for an 
example to be in the test suite. (Generally, we don't try to test 
combinations of rules in the ACATS, and this is such a combination. But 
there are cases where testing the individidual rules don't prove anything 
about the combination, and this appears to be such a case. That is, the 
implementation of protected type abstract rules are probably quite different 
from the normal subprogram rules, so just testing the normal case doesn't 
prove much. (You can find out details about writing ACATS tests at 
http://www.ada-auth.org/acats-files/4.1/docs/UG-E.HTM, although getting 
everything perfect is neither necessary nor likely).

Then submit the test to either the agent (agent@ada-auth.org) or to the 
ACATS-Test@ada-auth.org mailing list. And of course report the issue to 
AdaCore as well.

Since this is an Ada 2005 issue, it applies to a variety of other Ada 
compilers, and it should be checked for everyone. Moreover, having a test 
makes it easy to bring any objections to the ARG.

Your concrete subprogram declaration is legal, but I would expect that it 
needs a body. So forget that, it shouldn't be necessary in any case. (The 
inherited subprogram should be concrete by 3.9.3(6), and then either the 
type is legal (if properly overriding happens) or the unit is illegal --  
there are no other possibilities allowed by the language.)

                                             Randy.



  parent reply	other threads:[~2019-02-18 22:35 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-16  0:52 Private extension of a synchronized interface Jere
2019-02-17  9:50 ` Dmitry A. Kazakov
2019-02-17 13:46   ` Jere
2019-02-17 14:52     ` Dmitry A. Kazakov
2019-02-17 15:36       ` Jere
2019-02-17 16:28         ` Dmitry A. Kazakov
2019-02-17 20:56           ` Jere
2019-02-17 22:36 ` Simon Wright
2019-02-18  0:36   ` Jere
2019-02-18  8:11     ` Dmitry A. Kazakov
2019-02-18  8:29       ` Simon Wright
2019-02-18  8:42         ` Dmitry A. Kazakov
2019-02-18  8:26     ` Simon Wright
2019-02-18  8:33     ` Simon Wright
2019-02-18 15:40       ` Jere
2019-02-18 17:24         ` Simon Wright
2019-02-19 11:04           ` Simon Wright
2019-02-20  2:36             ` Jere
2019-02-20 10:46               ` Simon Wright
2019-02-20 15:04                 ` Jere
2019-02-18 15:49       ` Jere
2019-02-18 22:06 ` Randy Brukardt
2019-02-18 22:35 ` Randy Brukardt [this message]
2019-02-19 10:01   ` Egil H H
2019-02-19 11:29     ` Simon Wright
2019-02-19 11:53       ` Egil H H
2019-02-20  2:32   ` Jere
2019-02-20 13:46   ` Simon Wright
2019-02-20 23:43     ` Randy Brukardt
replies disabled

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