comp.lang.ada
 help / color / mirror / Atom feed
From: Maciej Sobczak <see.my.homepage@gmail.com>
Subject: Re: Ada Interfaces and the Liskov Substitution Principle
Date: 29 May 2007 08:34:18 -0700
Date: 2007-05-29T08:34:18-07:00	[thread overview]
Message-ID: <1180452858.118039.67740@w5g2000hsg.googlegroups.com> (raw)
In-Reply-To: <kzd3t06bdinz$.1jcbmu9dqomx7$.dlg@40tude.net>

On 29 Maj, 15:18, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
wrote:

> > OK, now I see your point. I have nothing against following this path -
> > assignment statement *is* special anyway. What could go wrong if we
> > say that assignment is not inherited?
>
> Then you will have a messy bunch of overloaded ones.

If I need them and can reasonably implement them, yes.
The design complexity of this will be somewhere there anyway.

> There are two variants
> of:
>
> 1. Use of T'Class, I considered this in a previous post, it is ambiguous.

I would ban it. :-)

> 2. Non-primitive operation (ugly hack). This will not work on class-wide
> arguments:
>
>    X : T'Class := Y; -- Illegal, ":=" isn't defined on LHS T'Class

This is not assignment_statement. This is initialization and I have
nothing against it. Actually, it is no different from initialization
of subprogram parameters and as such is not only harmless, it is
essential.

We are talking about real:

X := Y;

:-)

> >> And I don't see why it is a mess. What is wrong in assignment of
> >> UTF8_String to Wide_String, both from String'Class?
>
> > Probably design issue.
[...]
> So? This is exactly the reason why I want to keep them all in one class.

That's what I'm talking about (but then, we might be using different
terminology).
I say that you need one type String, that possibly uses strategy
internally to delegate details like encoding. You don't need encoding
to "leak out" at the level of types that the final user operates on.

> Encoding is a constraint put on the object. It is mapped to a type to be
> able to implement string operations independently, for each encoding
> through dispatching rather than by ugly nested case-statements.

You can (and should) have dispatching internally in the implementation
of operations of String. I'm not proposing any case statements here!

> And what about fixed vs. bounded vs. unbounded axis?

This is also interesting, but in a different way. :-)
Treating everything in pure OO way, these might be again internal
strategies of a single String type. Think of stream buffers in streams
(C++, Java).
On the other hand, purity is not always beneficial and from the
performance point of view fixed string provides the opportunity to get
rid of dynamic allocation. But to benefit from this opportunity, you'd
better not mess with OO but distinguish them using compile-time
polymorphism. In C++ we have policy-based class design for it.

> Why a fixed string
> shouldn't be assigned to an unbounded one and reverse?

Of course it should! What about template methods? ;-)
(hint: constructors and assignments in STL containers are templated
exactly to allow freedom in this aspect)

> How are you going to
> design such stuff without polymorphism?

Compile-time polymorphism works just fine and if you really need run-
time parameterization, you can get it with internal strategies (again,
think streambuf in streams in C++).

> By cut'n'paste, as RM does? At some
> point they too had got tired:
[...]

Yes, I have noticed. :-)
Looks like you guys need *real* templates. ;-)

> > Another reason why they are special is that they are intuitively
> > associated with some particular effects and these effects cannot be
> > reasonably provided in an automated way. That's why I think that
> > assignments of class-wide types should be forbidden.
>
> No, it is much simpler to provide multi-methods and make it consistent.

But then the compiler would need to either force you to implement the
whole square of assignment operations, or use run-time checks to
discover whether the assignment within a given pair of leaf types is
provided.
The former is unrealistic with evolving or open-ended hierarchies, the
latter smells more like Python than Ada.

> Presently Ada
> silently generates raise Constraint_Error, which is not good.

Agreed.

--
Maciej Sobczak
http://www.msobczak.com/




  parent reply	other threads:[~2007-05-29 15:34 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 [this message]
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
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