comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Ada Interfaces and the Liskov Substitution Principle
Date: Sat, 2 Jun 2007 10:19:44 +0200
Date: 2007-06-02T10:19:41+02:00	[thread overview]
Message-ID: <bluidejuaxlk$.1551mws1qca5i.dlg@40tude.net> (raw)
In-Reply-To: 1180729864.936057.258970@p47g2000hsd.googlegroups.com

On Fri, 01 Jun 2007 13:31:04 -0700, Maciej Sobczak wrote:

> On 1 Cze, 16:53, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
> 
>> or claiming that there is a semantic difference between X:=Y
>> and Assign(X,Y). I don't want a language with magical, semantically
>> non-decomposable assignments.
> 
> You have them at the level of fundamental types.

So what?

> You can treat X:=Y and Assign(X,Y) to be equivalent for *your* T (and
> if you have complete control over overloading of assignment then that
> might be actually the case), but at some level of detail they have to
> be implemented in terms of *non-decomposable* assignments of
> fundamental types anyway.

How a fundamental X:=Y differs from fundamental Assign(X,Y)? The question
is not about implementation of, but about semantic differences.
 
(It is the first time I meet somebody who tries to deny procedural
decomposition. You have to chance.)

> Now, the difference between T and T'Class is
> that operations with T can be statically decomposed down to this non-
> decomposable bricks. With T'Class it's just impossible to do this
> mechanically and it's unrealistic to expect it from the programmer for
> any non-trivial hierarchy.

The operations of T'Class are perfectly decomposable. There are two of them
(in Ada)

1. Class-wide operation has one body.

2. Primitive operation. The body is composed out for the bodies of the
operations defined for the specific types. This precisely means:

2.a. The specific body is explicitly overridden
2.b. It is inherited, and thus, it is built as a composition of a type view
conversion and the body of the parent type.

>>> You can replace a Circle with a Triangle but you better not try to
>>> assign them.
>>
>> This is not an explanation. Show a semantic difference between changing a
>> name binding from one value to another by A) "replacement" and B)
>> "assignment."
> 
> No problem. Replacement is when you just stop refering to X and start
> refering to Y (or its clone if the objects are mutable). Assignment is
> when you decompose down to real, hard-core-metal-and-concrete ':=' on
> fundamental types.

Mixing abstraction levels is a logical fallacy. You have to choose one,
which would define the semantics. Take any of above and show a difference:
either between "start to refer" and "start to have", or else between the
sequences of machine implementing "start to what."

> The difference is that (in Ada terms) replacement
> allows you to change the tag. Assignment cannot do this.

Neither can. But to show this we'd need to formalize it. Briefly: types
access T and T are different types. The semantic of assignment of access T
is not one of T, and neither is of the assignment of T'Class! It is a typed
language, after all...

>> Ah, wouldn't replacement double dispatching?
> 
> No, it wouldn't and that's the second difference. Replacement just
> gets rid of the current value before the new value is refered to,
> which means that from the dispatching point of view this operation is
> simply linear on right-hand-side - it's a pure single dispatch.

No, this does not work. Apart from being semantically wrong in general
case, it is technically wrong. You have to dispatch to finalize LHS. You
have to dispatch to re-construct it from RHS. See above, in Ada there is no
choice beyond class-wide and primitive operation. The latter dispatches
immediately, the former postpones the dispatch until its body. In both
cases it ultimately dispatches on both arguments. So semantically there is
no difference. Also see my earlier posts about ambiguity of the signatures
T x T'Class and T'Class x T in presence of derived types.

> Assignment has to be '2D' with both axes, or O(n2) in terms of
> implementation complexity. It has to be double-dispatching to make any
> sense and this is unrealistic implementation-wise.

It is semantically this way. There is nothing to do about it, but to scrap
either assignment or class. (We are going in circles)

> That's why T'Class, even though very interesting from the language
> construction point of view, cannot entirely include all functionality
> of access variable to T'Class (or pointer to base class in C++
> jargon).

This is irrelevant as they are different types. In fact an access type
could be treated as a member of the class, but then its assignment would
have a deep copy semantics and you are back where you have started from.

(C++ OO model is really poisoning. Don't mix types, just don't.)

>> Then let "assignment" :=
>> "replacement,"
> 
> Do you mean:
> - let's replace assignment by replacement, or
> - let's assign replacement to assignment?
> 
> ;-)

Take what you wish, but referential semantic is fundamentally insufficient,
in the sense that you cannot have a language without values, but only
references. This is the conceptual fault of Java et al. Once you had at
least one value at the end of the referential chains, you'd have to assign
(:-)) it and give a type to it. (It is about typed languages, right?)  Then
because your types algebra has classes one could create a class of. In the
end you will face the same question again: what is the assignment on the
class. All this referential stuff is just shifting subjects.

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



  reply	other threads:[~2007-06-02  8:19 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-23 19:47 Ada Interfaces and the Liskov Substitution Principle Stefan Lucks
2007-05-23 20:32 ` Ludovic Brenta
2007-05-23 22:00   ` Randy Brukardt
2007-05-24  0:56     ` Anh Vo
2007-05-24 18:27     ` Pascal Obry
2007-05-24 18:39       ` Dmitry A. Kazakov
2007-05-24 18:51         ` Pascal Obry
2007-05-24 22:44         ` Randy Brukardt
2007-05-24  6:57   ` Stefan Lucks
2007-05-23 20:54 ` Maciej Sobczak
2007-05-23 21:58   ` Randy Brukardt
2007-05-24  7:29     ` Maciej Sobczak
2007-05-24  8:02       ` Dmitry A. Kazakov
2007-05-24 12:58         ` Maciej Sobczak
2007-05-24 13:42           ` Dmitry A. Kazakov
2007-05-24 22:08           ` Robert A Duff
2007-07-01  1:00             ` David Thompson
2007-05-24 22:58           ` Randy Brukardt
2007-05-25  7:52             ` Maciej Sobczak
2007-05-25  8:21               ` Dmitry A. Kazakov
2007-05-25 20:27                 ` Maciej Sobczak
2007-05-26  7:48                   ` Dmitry A. Kazakov
2007-05-27  8:30                     ` Maciej Sobczak
2007-05-27 10:04                       ` Dmitry A. Kazakov
2007-05-29  8:03                         ` Maciej Sobczak
2007-05-29 13:18                           ` Dmitry A. Kazakov
2007-05-29 13:32                             ` Dmitry A. Kazakov
2007-05-29 15:34                             ` Maciej Sobczak
2007-05-29 17:07                               ` Dmitry A. Kazakov
2007-05-30  7:40                                 ` Maciej Sobczak
2007-05-30  8:43                                   ` Dmitry A. Kazakov
2007-05-30 12:54                                     ` Maciej Sobczak
2007-05-30 13:56                                       ` Dmitry A. Kazakov
2007-05-30 16:49                                         ` vgodunko
2007-05-30 20:52                                         ` Maciej Sobczak
2007-05-31  8:15                                           ` Dmitry A. Kazakov
2007-05-31 13:46                                             ` Maciej Sobczak
2007-06-01  7:29                                               ` Dmitry A. Kazakov
2007-06-01 13:32                                                 ` Maciej Sobczak
2007-06-01 14:53                                                   ` Dmitry A. Kazakov
2007-06-01 20:31                                                     ` Maciej Sobczak
2007-06-02  8:19                                                       ` Dmitry A. Kazakov [this message]
2007-06-02 16:49                                                         ` Maciej Sobczak
2007-06-03  7:09                                                           ` Dmitry A. Kazakov
2007-06-03 22:04                                                             ` Maciej Sobczak
2007-06-04  8:08                                                               ` Dmitry A. Kazakov
2007-06-04 17:02                                                                 ` Maciej Sobczak
2007-06-05  8:35                                                                   ` Dmitry A. Kazakov
2007-06-05 22:12                                                                     ` Maciej Sobczak
2007-06-06  8:21                                                                       ` Dmitry A. Kazakov
2007-06-06 14:46                                                                         ` Maciej Sobczak
2007-06-06 15:11                                                                           ` Maciej Sobczak
2007-06-06 15:32                                                                       ` Markus E Leypold
2007-05-24 10:42       ` Georg Bauhaus
2007-05-24 13:41         ` Dmitry A. Kazakov
2007-05-25 16:59         ` Markus E Leypold
2007-05-28  9:52           ` Georg Bauhaus
2007-05-28 11:50             ` Dmitry A. Kazakov
2007-05-28 23:32               ` Georg Bauhaus
2007-05-29 12:05                 ` Dmitry A. Kazakov
2007-05-29 13:33                 ` Georg Bauhaus
2007-05-29 17:29                   ` Dmitry A. Kazakov
2007-05-29 20:46                     ` Georg Bauhaus
2007-05-30  7:53                       ` Dmitry A. Kazakov
2007-05-30 13:18                       ` Georg Bauhaus
2007-05-31 10:27                         ` Dmitry A. Kazakov
2007-05-31 11:44                         ` Georg Bauhaus
2007-06-01  7:37                           ` Dmitry A. Kazakov
2007-06-01 10:07                             ` Markus E Leypold
2007-06-01 11:41                             ` Georg Bauhaus
2007-06-01 13:07                               ` Dmitry A. Kazakov
2007-05-28 13:47             ` Markus E Leypold
2007-05-28 23:12               ` Georg Bauhaus
2007-05-28 13:56             ` Markus E Leypold
2007-05-28 23:00               ` Georg Bauhaus
2007-05-24  7:39 ` Dmitry A. Kazakov
2007-05-24 11:12   ` Stefan Lucks
2007-05-24 13:56     ` Dmitry A. Kazakov
2007-05-24 14:41       ` Stefan Lucks
2007-05-24 15:46         ` Dmitry A. Kazakov
2007-05-24 15:00       ` Georg Bauhaus
replies disabled

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