From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Strange error message
Date: Sun, 01 Jun 2014 17:18:03 -0400
Date: 2014-06-01T17:18:03-04:00 [thread overview]
Message-ID: <wcctx84qqgk.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 33e17033-615d-43d4-8b47-9357c8875a10@googlegroups.com
Charly <carl.weierstrass@googlemail.com> writes:
> Hi,
>
> when I defined a class hierarchy I encountered a problem, that I could reduce
> to the following few lines:
>
> This version compiles without problems:
> -----------------
> package Test is
>
> type Base is tagged private;
> function Create return Base;
>
> type High is new Base with private;
>
> private
>
> type Base is tagged null record;
>
> type High is new Base with null record;
>
> end Test;
> -----------------
>
> but this one
>
> -----------------
> package Test is
>
> type Base is tagged private;
> function Create return Base;
>
> type High is new Base with private;
>
> private
>
> type Base is tagged null record;
>
> type High is new Base with record --
> H_Val : Natural := 0; -- these lines are changed
> end record; --
>
> end Test;
> -----------------
>
> does not compile an I get an error:
>
> type must be declared abstract or "Create" overridden
>
> Why do I have to overide the function Create for type High.
> I don't see the necessity.
Because whatever Create does, it doesn't set any value for H_Val,
because H_Val doesn't exist in Base. So it makes no sense to inherit
it as is. [*] But see below.
In your first version, High adds no new components. Ada 95 used to
require overriding in that case, too, but the overriding is always:
function Create return High is
begin
return (Base with null record);
end Create;
What else would it be? So the language was changed to provide that
overriding by default in the "null record" case.
I don't know why Dmitry and Randy want us to write that out explicitly;
it seems like an obviously useful and safe default.
[*] Your H_Val has a default of 0, so it might make sense to define
the language to provide an automatic default overriding:
function Create return High is
begin
return (Base with H_Val => 0);
end Create;
That's not how the language is now, and I suspect Dmitry and Randy
would be appalled at the idea. I don't really understand their
point of view -- I mean, I love consistency and all, but "A FOOLISH
consistency is the hobgloblin... etc".
By the way, Tucker wanted the current rule for Ada 95. I argued him
out of it. That is, in 1993 or so, I agreed with Dmitry's and Randy's
current position. I've since changed my mind.
- Bob
next prev parent reply other threads:[~2014-06-01 21:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-01 10:24 Strange error message Charly
2014-06-01 11:11 ` Dmitry A. Kazakov
2014-06-01 12:50 ` Charly
2014-06-01 13:54 ` Simon Wright
2014-06-01 21:18 ` Robert A Duff [this message]
2014-06-02 7:47 ` Dmitry A. Kazakov
2014-06-02 13:49 ` Robert A Duff
2014-06-02 14:55 ` Dmitry A. Kazakov
2014-06-02 17:24 ` Robert A Duff
2014-06-02 18:39 ` Shark8
2014-06-02 19:56 ` Randy Brukardt
-- strict thread matches above, loose matches on Subject: below --
2002-11-13 10:36 strange " evangeli
2002-11-13 15:05 ` Stephen Leake
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox