comp.lang.ada
 help / color / mirror / Atom feed
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


  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