comp.lang.ada
 help / color / mirror / Atom feed
From: Georg Bauhaus <rm.tsoh.plus-bug.bauhaus@maps.futureapps.de>
Subject: Re: Why constructing functions is a mess [was Language lawyer question: task activation
Date: Sat, 28 Feb 2009 16:36:43 +0100
Date: 2009-02-28T16:36:50+01:00	[thread overview]
Message-ID: <49a95a12$0$31347$9b4e6d93@newsspool4.arcor-online.net> (raw)
In-Reply-To: <1wzjy9pzbft1m.1lut7nszfkzmp$.dlg@40tude.net>

Dmitry A. Kazakov wrote:

> 3. You still cannot publicly extend T if you have to add some new
> discriminants. Discriminants still are not properly abstracted.

Yes.

> (This cannot be saved, it is just wrong.)
> 
>>> In order to be used in
>>>
>>>    type S is new T with ...;
>>>    function Create (....) return S;
> 
>> (Deriving publicly
>> from an abstract limited type with unknown discriminants--to me,
>> the <> signals the intent of the author of T, namely that T
>> should be considered none of our business?)
> 
> 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. The choice is deliberate. There is no way to construct
objects of type T. There is no way to construct objects that
somehow involve T objects, e.g. objects of types derived from
T publicly. The (<>)'s message is that T's objects are handled
in the private part.  None of our business.

>>> 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).

> 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.
An abstract T is just a means to allow concrete types derived
from T. (<>)ing T says, "Keep your hands off!".




  reply	other threads:[~2009-02-28 15:36 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 [this message]
2009-02-28 16:22                               ` Dmitry A. Kazakov
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