comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Inherited Methods and such
Date: Fri, 21 Sep 2007 20:59:56 +0200
Date: 2007-09-21T20:58:45+02:00	[thread overview]
Message-ID: <egz670qwxgyj$.15oz5zin5794w$.dlg@40tude.net> (raw)
In-Reply-To: 1190321119.206313.65290@57g2000hsv.googlegroups.com

On Thu, 20 Sep 2007 13:45:19 -0700, Maciej Sobczak wrote:

> On 20 Wrz, 18:22, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
> 
>>>> If you say that an object of the type T1 can take values of the type T2,
>>>> such that not T1<:T2, then either:
>>
>>> What is T1<:T2 ?
>>
>> Subsumption.
> 
> This I can guess. What is the direction?

Any value of T1 is also one of T2.

> No, this is strongly typed, because the type is determined
> declaratively and can be deduced without examining the value.

If it were so, then

class T
{
   T () { f(); g(); }
   void g() {}
   virtual void f() {}
};

should be illegal. Consider f() called in the constructor. The hidden
parameter *this of is neither of T nor of T'Class:

It cannot be of T, because T is not yet constructed (and you don't want to
consider *this specific anyway). It is not of T'Class because T and all
possible derived from it types shall be constructed before T'Class. In
fact, neither g(), nor f() can be called in a true constructor.

BTW, this is also the reason why people calling Ada's Initialize a
constructor are wrong. Initialize is not a constructor of either T or
T'Class.

Further, the type of *this is indeterminable, because I can explicitly call
the constructor at any stage of filling the dispatching table, the effect
will depend on the table. So either you commit *this to a mutating specific
type T or to static polymorphic type T'Class. But in either case the
contract is violated in T::T().

>>> Every single moment the object has one type. But the time is
>>> passing and the object's classification flows together with time.
>>
>> Nope, the result is another object, *because* you cannot change the type.
> 
> It is always the same object, on the basis of its identifier, which is
> invariant. By indentifier I take the address of the object.

1. You cannot take address because the object might be in cache.
2. If the identifier is the only permanent property of an object then it is
exactly what one understand under untyped. The only behavior you can
associate with the object is its identifier.

>> Even if you cast and per chance the address of the result is same (why
>> should anybody care?), it is a different object.
> 
> No, it's the same object. It's just fattening.
> Unless in your world people change their identity after fattening. :-)

In my world people don't become whales upon fattening. At least not in one
generation. (:-))

>> Otherwise, you would have
>> to drop the concept of single type and go untyped.
> 
> If you limit yourself to these two options only, it's your limitation,
> not mine.
> I see a place for dynamically changing types. It is *single* in any
> given moment.

> It is still typed, because it is determined a priori,
> not by actual value.

See above.

> I *know* how the type will change without looking
> at the value.

If you *know* it, then the actual type of the object is a class containing
the trace of all possible types the object would "take." In this case the
object is polymorphic and has exactly one type. The construction is the
following:

T={t1,t2,t3}
S={s1,s2}

Now if you know that X is either T or S. Then the type of X is

class {T,S}= { (T,t1), (T,t2), (T,t3), (S,s1), (S,s2) }

X does not mutate and its values are neither of T or of S, we cannot do
that without breaking strong typing.

> It is completely different from assigning whatever value
> to some object and saying that it changed its type as a result of
> this.

How is it different? Why the type can be changed upon construction, but
cannot upon assignment? Why not to demote/promote?

In Ada terms it would change the tag. It is difficult to implement but
consistent, under the assumption, that you do not change the type! The type
is T'Class. In the example above:

   X : class {T,S} := (T,t1);
begin
   X := (T,t2);
   X := (S,s1);  -- The type is not changed!

The contract of X is invariantly class {T,S}. The so-called specific type
of X changes, but it is not the true type of. It is the type of the second
component of its value. The true type is class {T,S}.

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



  reply	other threads:[~2007-09-21 18:59 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-17 14:26 Inherited Methods and such shaunpatterson
2007-09-17 15:11 ` Ludovic Brenta
2007-09-17 16:46   ` shaunpatterson
2007-09-17 19:07     ` Ludovic Brenta
2007-09-17 20:22   ` Maciej Sobczak
2007-09-17 21:07     ` Ludovic Brenta
2007-09-18 14:27       ` Maciej Sobczak
2007-09-18 14:27       ` Maciej Sobczak
2007-09-18 15:25         ` Dmitry A. Kazakov
2007-09-18 18:34           ` Ludovic Brenta
2007-09-18 19:29             ` Dmitry A. Kazakov
2007-09-18 19:39               ` Ludovic Brenta
2007-09-18 20:49                 ` Dmitry A. Kazakov
2007-09-18 21:10               ` Simon Wright
2007-09-18 20:39           ` Maciej Sobczak
2007-09-18 21:12             ` Dmitry A. Kazakov
2007-09-19 14:49               ` Maciej Sobczak
2007-09-19 15:16                 ` Dmitry A. Kazakov
2007-09-19 22:13                   ` Maciej Sobczak
2007-09-20  8:12                     ` Dmitry A. Kazakov
2007-09-20 13:52                       ` Maciej Sobczak
2007-09-20 16:22                         ` Dmitry A. Kazakov
2007-09-20 20:45                           ` Maciej Sobczak
2007-09-21 18:59                             ` Dmitry A. Kazakov [this message]
2007-09-21 21:02                               ` Maciej Sobczak
2007-09-22  8:48                                 ` Dmitry A. Kazakov
2007-09-22 21:53                                   ` Maciej Sobczak
2007-09-23  8:41                                     ` Dmitry A. Kazakov
2007-09-23 20:36                                       ` Maciej Sobczak
2007-09-24  9:32                                         ` Dmitry A. Kazakov
2007-09-24 15:02                                           ` Maciej Sobczak
2007-09-24 19:20                                             ` Dmitry A. Kazakov
2007-09-25 20:53                                               ` Maciej Sobczak
2007-09-26 10:42                                                 ` Dmitry A. Kazakov
2007-09-26 21:31                                                   ` Maciej Sobczak
2007-09-27 15:02                                                     ` Dmitry A. Kazakov
2007-09-27 21:02                                                       ` Maciej Sobczak
2007-09-26 12:21                                                 ` Robert A Duff
2007-09-26 12:54                                                   ` Dmitry A. Kazakov
2007-09-26 21:37                                                   ` Maciej Sobczak
2007-09-26 23:47                                                     ` Randy Brukardt
2007-09-27 21:08                                                       ` Maciej Sobczak
2007-09-28  0:44                                                         ` Randy Brukardt
2007-09-28 20:32                                                           ` Maciej Sobczak
2007-09-28 22:35                                                             ` Randy Brukardt
2007-09-29 23:58                                                             ` Robert A Duff
2007-09-26 12:26                                                 ` Robert A Duff
2007-09-26 21:50                                                   ` Maciej Sobczak
2007-09-26 22:20                                                     ` Ray Blaak
2007-09-27  0:01                                                     ` Randy Brukardt
2007-09-27 13:39                                                     ` Robert A Duff
2007-09-27 14:54                                                       ` Dmitry A. Kazakov
2007-09-28  0:35                                                         ` Randy Brukardt
     [not found]                                                           ` <7p6gc1s9imfa$.kmvwf5zyf8e9.dlg@40tude.net>
2007-09-28 22:53                                                             ` Randy Brukardt
2007-09-29 20:37                                                               ` Dmitry A. Kazakov
2007-09-27 21:23                                                       ` Maciej Sobczak
2007-09-28 19:12                                                         ` Robert A Duff
2007-09-28 19:02                                                     ` Robert A Duff
2007-09-28 19:42                                                       ` Robert A Duff
2007-09-28 20:44                                                         ` Maciej Sobczak
2007-09-28 22:40                                                           ` Randy Brukardt
2007-09-29 20:35                                                           ` Dmitry A. Kazakov
2007-09-29 20:52                                                             ` Maciej Sobczak
2007-09-30  8:38                                                               ` Dmitry A. Kazakov
2007-09-29 23:47                                                             ` Robert A Duff
2007-09-29 20:48                                                           ` Maciej Sobczak
2007-09-29 23:39                                                             ` Robert A Duff
2007-09-30  8:38                                                               ` Dmitry A. Kazakov
2007-09-29 23:42                                                           ` Robert A Duff
2007-09-25  1:59                                   ` Randy Brukardt
2007-09-25  8:59                                     ` Dmitry A. Kazakov
2007-09-25 21:02                                       ` Randy Brukardt
2007-09-26 12:42                                         ` Dmitry A. Kazakov
2007-09-18  4:03 ` Steve
replies disabled

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