From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Preventing type extensions
Date: Mon, 13 Sep 2010 23:00:40 +0200
Date: 2010-09-13T23:00:39+02:00 [thread overview]
Message-ID: <kab53py303sc.xyln6bjfhm0c$.dlg@40tude.net> (raw)
In-Reply-To: 8f7fe9F2nlU1@mid.individual.net
On Mon, 13 Sep 2010 23:21:28 +0300, Niklas Holsti wrote:
> Dmitry A. Kazakov wrote:
>> On Mon, 13 Sep 2010 13:23:10 +0300, Niklas Holsti wrote:
>>
>>> Dmitry A. Kazakov wrote:
>>>
>>>> re-dispatch is the problem, not aggregation or delegation. Don't implement
>>>> anything by means of re-dispatch and you will have no "callbacks." A type
>>>> extension cannot break anything in the parent's implementation unless it
>>>> re-dispatches.
>>> Conversely, there are architectures (sensible ones, in my opinion) in
>>> which the extension is broken, or is difficult or cumbersome to
>>> implement, if the parent does *not* re-dispatch.
>>
>> I am not sure if these case aren't kludges caused by other language
>> deficiencies (e.g. lack of MI, MD, constructors etc).
>
> I agree that re-dispatching can be used to simulate multiple dispatching
> (MD) in Ada. I have no experience of languages that allow multiple
> inheritance or multiple dispatch, so they are not in my design tool-kit.
> But in the designs where I have used Ada re-dispatching, I don't see how
> MI/MD could have replaced re-dispatching; they seem unrelated.
The only case where I am really using re-dispatch (though almost always
through the Rosen's trick) is layered protocols, where upper levels are
defined in terms of lower levels and the latter are implemented very late
(e.g. raw I/O operations). I strongly feel that this could be done simpler
and safer using MI and possibly MD.
> That would not have replaced re-dispatching, as I have used it. My
> re-dispatching calls are interleaved in a more complex way with the
> logic of the calling operation.
This is exactly the reason why I am reluctant to use it. I don't want to
fight this complexity, things are already complex without that.
>> One could consider dispatch restricted to class-wide operations while
>> allowing T'Class'Class. Then operations class-wide for T would be primitive
>> for T'Class. I.e. one could override them within T'Class'Class.
>
> I think an example is needed before I can understand that. Which objects
> are in T'Class'Class, but not in T'Class?
T'Class'Class would be a type which values are of T'Class. Such types would
appear if we could derive from T'Class.
> Re-dispatching calls from a primitive (non-class-wide) operation can
> sometimes be replaced by dispatching calls from a class-wide operation,
> and that can clarify a design. Perhaps your suggestion is an extension
> of this?
When re-dispatch is consistently removed, primitive operations are replaced
by class-wide ones. Sometimes you want to replace a class-wide operation
itself rather than augment it by some primitive operation hook called from
it. A consistent way to override a class-wide operation would the class of
class-wide types. (I did not much ponder over this model)
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2010-09-13 21:00 UTC|newest]
Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-12 10:18 Preventing type extensions Florian Weimer
2010-09-12 11:59 ` Ludovic Brenta
2010-09-12 12:53 ` Florian Weimer
2010-09-12 21:23 ` Maciej Sobczak
2010-09-13 5:32 ` Florian Weimer
2010-09-13 7:13 ` Dmitry A. Kazakov
2010-09-13 9:19 ` Georg Bauhaus
2010-09-13 9:42 ` Dmitry A. Kazakov
2010-09-13 10:23 ` Niklas Holsti
2010-09-13 12:55 ` Cyrille
2010-09-13 13:55 ` Dmitry A. Kazakov
2010-09-13 21:13 ` J-P. Rosen
2010-09-21 13:57 ` Cyrille
2010-09-21 14:19 ` Dmitry A. Kazakov
2010-09-21 14:44 ` Cyrille
2010-09-21 16:25 ` Dmitry A. Kazakov
2010-09-21 17:11 ` Georg Bauhaus
2010-09-21 18:11 ` Dmitry A. Kazakov
2010-09-23 20:00 ` Simon Wright
2010-09-23 20:49 ` Dmitry A. Kazakov
2010-09-24 9:10 ` Georg Bauhaus
2010-09-24 10:24 ` Dmitry A. Kazakov
2010-09-24 13:30 ` Niklas Holsti
2010-09-24 16:27 ` Dmitry A. Kazakov
2010-09-24 17:47 ` Niklas Holsti
2010-09-24 19:42 ` Dmitry A. Kazakov
2010-09-21 14:32 ` J-P. Rosen
2010-09-21 15:02 ` Cyrille
2010-09-21 15:26 ` J-P. Rosen
2010-09-21 16:18 ` Cyrille
2010-09-22 8:01 ` J-P. Rosen
2010-09-22 17:28 ` Cyrille
2010-09-22 19:30 ` Ludovic Brenta
2010-09-22 19:51 ` Florian Weimer
2010-09-22 20:14 ` Dmitry A. Kazakov
2010-09-22 20:25 ` Florian Weimer
2010-09-22 20:38 ` Dmitry A. Kazakov
2010-09-22 21:25 ` Vinzent Hoefler
2010-09-22 21:20 ` Georg Bauhaus
2010-09-22 20:16 ` Ludovic Brenta
2010-09-22 20:34 ` Florian Weimer
2010-09-22 22:45 ` Britt Snodgrass
2010-09-23 8:02 ` Ludovic Brenta
2010-09-23 16:51 ` Pascal Obry
2010-09-23 18:37 ` Florian Weimer
2010-09-23 18:55 ` Pascal Obry
2010-09-23 20:28 ` Ludovic Brenta
2010-09-24 9:20 ` Ludovic Brenta
2010-09-24 14:49 ` Simon Wright
2010-09-24 15:09 ` Ludovic Brenta
2010-09-24 16:21 ` Robert A Duff
2010-09-25 7:10 ` Pascal Obry
2010-09-25 12:03 ` Brian Drummond
2010-09-24 8:16 ` J-P. Rosen
2010-09-24 8:39 ` Cyrille
2010-09-24 9:27 ` Cyrille
2010-09-29 16:47 ` J-P. Rosen
2010-09-30 10:08 ` Cyrille
2010-10-05 17:02 ` J-P. Rosen
2010-10-08 7:50 ` Cyrille
2010-10-08 13:58 ` Cyrille
2010-10-08 20:12 ` Dmitry A. Kazakov
2010-10-11 7:57 ` Cyrille
2010-10-11 8:24 ` Dmitry A. Kazakov
2010-10-12 5:23 ` Shark8
2010-10-13 9:06 ` J-P. Rosen
2010-10-13 17:37 ` Cyrille
2010-10-13 18:50 ` Dmitry A. Kazakov
2010-09-21 14:50 ` (see below)
2010-09-21 17:37 ` Cyrille
2010-09-21 19:07 ` (see below)
2010-09-13 13:05 ` Dmitry A. Kazakov
2010-09-13 20:21 ` Niklas Holsti
2010-09-13 21:00 ` Dmitry A. Kazakov [this message]
2010-09-13 21:10 ` J-P. Rosen
2010-09-14 12:16 ` Niklas Holsti
2010-09-14 16:46 ` Dmitry A. Kazakov
2010-09-14 18:08 ` Niklas Holsti
2010-09-14 18:32 ` Niklas Holsti
2010-09-15 8:18 ` Dmitry A. Kazakov
2010-09-14 17:04 ` J-P. Rosen
2010-09-13 15:12 ` Securing type extensions (was: Preventing type extensions) Georg Bauhaus
2010-09-13 15:29 ` Securing type extensions Dmitry A. Kazakov
2010-09-13 17:23 ` Simon Wright
2010-09-13 20:22 ` Georg Bauhaus
2010-09-13 20:41 ` Dmitry A. Kazakov
2010-09-14 10:02 ` Georg Bauhaus
2010-09-14 12:22 ` Dmitry A. Kazakov
2010-09-14 21:18 ` Georg Bauhaus
2010-09-15 8:15 ` Dmitry A. Kazakov
2010-09-15 20:47 ` Georg Bauhaus
2010-09-16 7:47 ` Dmitry A. Kazakov
2010-09-16 11:52 ` Georg Bauhaus
2010-09-16 12:45 ` Dmitry A. Kazakov
2010-09-16 20:53 ` Georg Bauhaus
2010-09-16 21:37 ` Dmitry A. Kazakov
2010-09-17 8:45 ` Georg Bauhaus
2010-09-17 9:39 ` Dmitry A. Kazakov
2010-10-05 5:59 ` Randy Brukardt
2010-09-13 18:32 ` Preventing " Florian Weimer
2010-09-13 20:30 ` Dmitry A. Kazakov
2010-09-22 19:41 ` Florian Weimer
2010-09-22 20:34 ` Dmitry A. Kazakov
2010-09-22 21:10 ` Georg Bauhaus
2010-09-17 0:16 ` Shark8
2010-09-17 7:04 ` AdaMagica
2010-09-17 21:05 ` Shark8
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox