comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Why constructing functions is a mess [was Language lawyer question: task activation
Date: Sat, 28 Feb 2009 17:22:25 +0100
Date: 2009-02-28T17:22:27+01:00	[thread overview]
Message-ID: <p2ugsc0q86gs.1wau2yijrzj7t.dlg@40tude.net> (raw)
In-Reply-To: 49a95a12$0$31347$9b4e6d93@newsspool4.arcor-online.net

On Sat, 28 Feb 2009 16:36:43 +0100, Georg Bauhaus wrote:

> Dmitry A. Kazakov wrote:
> 
>> Exactly. This is why a user of public T must be able to construct T knowing
>> nothing about the discriminants of T.
> 
> I meant to say that the derivation should not work in the
> following sense. T being (<>)ed, abstract, and limited means,
> clients are supposed to not even try to create objects of this
> type.

It does not create T. It does S.

(an inherited from T part of S is constructed as required by the designer
of T. No any object of T is created. T is abstract.)

>>>> Remember? Constructor is not function. It never will. See the problem?
>>> Assuming C++ has constructors, will your arguments apply
>>> in the following examples (just trying to understand):
>>>
>>> class T
>>> {
>>> public:
>>>   virtual void op() = 0;
>>> private:
>>>   T(char constraint) : c(constraint) {}
>>>   char c;
>>> };
>> 
>> No, the constructor in the example must be public.
> 
> The constructor is private because T(<>) has private
> constratints only. IOW, clients cannot construct
> an object either of class T (C++) or of type T(<>) (Ada).

This only shows that you provided a wrong C++ example. The right one, i.e.
corresponding to the case I presented is

class T
{
public:
   virtual void op() = 0;
   T (char constraint);
private:
   char c;
};

>> Probably you refer to
>> the trick when <> is used to prevent uninitialized objects. But T is
>> already abstract. You cannot create it in any way.
> 
> When S is derived from some public T without a (<>),
> I can name T in S'(T with ...) when T is just abstract.
> This illustrates that (<>) prevents (meaningful) public derivation.

No. A meaningful derivation is prevented by the language bug that confuses
constructors with functions. These two different concepts evidently collide
when types are abstract.

You misinterpret the purpose of <>. If Ada designers wished to prevent
derivation from T(<>), they would simply do it. If they did, they would
also prohibit such *final* types from being abstract. Obviously.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2009-02-28 16:22 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-19 17:37 Language lawyer question: task activation Adam Beneschan
2009-02-19 17:57 ` Dmitry A. Kazakov
2009-02-19 23:57   ` Robert A Duff
2009-02-20 13:22     ` Dmitry A. Kazakov
2009-02-23  7:36       ` Jean-Pierre Rosen
2009-02-20  5:43   ` christoph.grein
2009-02-20 10:44     ` Dmitry A. Kazakov
2009-02-20 11:14       ` christoph.grein
2009-02-20 12:07         ` mockturtle
2009-02-20 13:22           ` Dmitry A. Kazakov
2009-02-20 16:45             ` Georg Bauhaus
2009-02-20 18:41               ` Dmitry A. Kazakov
2009-02-20 22:19                 ` Georg Bauhaus
2009-02-21  8:31                   ` Dmitry A. Kazakov
2009-02-27 23:29                     ` Randy Brukardt
2009-02-28  8:13                       ` Why constructing functions is a mess [was Language lawyer question: task activation (was: Language lawyer question: task activation)) Dmitry A. Kazakov
2009-02-28 12:20                         ` Why constructing functions is a mess [was Language lawyer question: task activation Georg Bauhaus
2009-02-28 13:45                           ` Dmitry A. Kazakov
2009-02-28 15:36                             ` Georg Bauhaus
2009-02-28 16:22                               ` Dmitry A. Kazakov [this message]
2009-02-28 17:19                                 ` Georg Bauhaus
2009-02-28 17:48                                   ` Dmitry A. Kazakov
2009-02-28 18:39                                     ` Georg Bauhaus
2009-02-28 20:17                                       ` Dmitry A. Kazakov
2009-03-02 16:13                                         ` Georg Bauhaus
2009-03-02 17:46                                           ` Dmitry A. Kazakov
2009-03-02 18:50                                             ` Georg Bauhaus
2009-03-02 21:02                                               ` Dmitry A. Kazakov
2009-03-03  7:04                                                 ` christoph.grein
2009-03-03  8:45                                                   ` Dmitry A. Kazakov
2009-03-03  9:27                                                     ` christoph.grein
2009-03-03  9:34                                                       ` Dmitry A. Kazakov
2009-03-03 19:13                                                       ` Pascal Obry
2009-03-04  5:29                                                         ` christoph.grein
2009-03-04  8:32                                                           ` Dmitry A. Kazakov
2009-03-04  9:05                                                             ` christoph.grein
2009-03-04  9:47                                                               ` Dmitry A. Kazakov
2009-02-28 23:12                             ` Maciej Sobczak
2009-03-01  8:23                               ` Dmitry A. Kazakov
2009-02-19 23:54 ` Robert A Duff
2009-02-20 10:18 ` Robert_Matthews
2009-02-20 10:34   ` christoph.grein
2009-02-20 14:16   ` Robert A Duff
2009-02-20 16:57     ` Robert_Matthews
replies disabled

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