comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Text_IO, was: Re: Something I don't understand
Date: Wed, 19 Feb 2014 10:40:35 +0100
Date: 2014-02-19T10:40:35+01:00	[thread overview]
Message-ID: <eez9av39unhs$.x8n7kzyrb9wi.dlg@40tude.net> (raw)
In-Reply-To: bmj8o6Fmpc5U1@mid.individual.net

On Wed, 19 Feb 2014 10:36:29 +0200, Niklas Holsti wrote:

> On 14-02-18 11:31 , Dmitry A. Kazakov wrote:
>> On Tue, 18 Feb 2014 11:00:44 +0200, Niklas Holsti wrote:

>> To me text buffer, stream, file, string are all instances of the class of
>> types over which Put dispatches. OK, we can call the abstract root type of
>> the class "Text."
> 
> Perhaps Put would just be overloaded for these types. It depends if you
> consider the types a class, or not. I'm not sure what is best.

When you overload you get an explosion of variants which is especially
extreme in the case of MD, because you have N x M x L variants. It is
exponential to the number of independent hierarchies. For I/O it is at
least 3: medium, data, aggregated parameters. Fourth candidate could be
transaction state for complex I/O.

Another and even more serious issue is that ad-hoc polymorphism prevents
code reuse. You cannot inherit, you cannot write class-wide code because
you cannot have class-wide objects. Yet a typical usage of Text_IO is
class-wide. When designing a text processing or text rendering application
you don't want to deal with concrete types of medium. E.g. writing an
interpreter you want it working with whatever type of input, not just
string or just File_Type.

>>> The final
>>> "Put" would then render according to the output medium.
>> 
>> Yes, that Put would be an implementation of the primitive operation defined
>> for the class Text.
> 
> I would make Text a type, not a class. This would avoid the need for
> multiple dispatch on a controlling Text parameter.
> 
> I'm thinking of two levels of "Put":
> 
>    Put (To : in out Text, Item : in String);
>       Add items to a Text, building a logically structured Text,
>       but without rendering it yet. This wil probably need
>       some concept of "points in a Text where more stuff can
>       be inserted" so that the Put can preserve or extend the
>       logical Text structure.
> 
>    Put (To : in out File; Item : in Text);
>       Render the Text into some external File.
> 
> The Text buffer intermediary means that each level of Put can (if
> desired) be dispatching on one of the parameters, without needing
> multiple dispatch.

This was attempted before, many many times, actually. From PostScript to
HTML, an intermediate language that would take care of separating higher
level formatting from lower level rendering. It never worked how many times
tried.

And for sure, it will be even more hated than Text_IO page formatting is,
because the overhead will be far bigger. Imagine describing the semantics
of, say, conversion of File, Stream, String to Text and backward.

>> This search for other "ways" (aspects, generics etc) is really damaging the
>> language.
> 
> I don't agree. I see aspects as strengthening or broadening the type
> concept, and generics as a meta-type level.

Either is a parametrization. Parametrization does not broaden anything,
when held at the meta level. You can parametrize type, statement, object,
package, source code itself, you could even do the object code. It is
completely orthogonal to what is being parametrized and by which entities.

Parametrization is bad when the parametric entity is itself not a language
entity. E.g. discriminaned type is OK, because it is still a type. Generic
type is not OK, because it is not a type but something else. The latter is
an erosion of the type system not broadening.

> But I must admit that I have
> lately been using generics less often and have instead used classes and
> dispaching more often. However, I think that generics are useful and are
> not entirely subsumed by classes.

Both are classes, the means of constructing these classes are different and
so are the properties and usage of these classes.

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

  reply	other threads:[~2014-02-19  9:40 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-13 23:57 Something I don't understand Laurent
2014-02-14  0:18 ` adambeneschan
2014-02-14  7:05   ` Charles H. Sampson
2014-02-15 15:27   ` Laurent
2014-02-15 19:10     ` Laurent
2014-02-15 20:05       ` Niklas Holsti
2014-02-15 21:16         ` Laurent
2014-02-15 21:40       ` Jeffrey Carter
2014-02-16  1:39       ` Robert A Duff
2014-02-16  9:08         ` Text_IO, was: " Simon Clubley
2014-02-16  9:43           ` Dmitry A. Kazakov
2014-02-16 16:57             ` Dennis Lee Bieber
2014-02-16 16:17           ` Robert A Duff
2014-02-17 12:52             ` Simon Clubley
2014-02-17 15:32               ` G.B.
2014-02-17 15:35                 ` G.B.
2014-02-17 17:34                 ` Mike H
2014-02-17 16:59               ` Niklas Holsti
2014-02-17 17:17                 ` Dmitry A. Kazakov
2014-02-17 17:42                   ` Niklas Holsti
2014-02-17 19:55                     ` Dmitry A. Kazakov
2014-02-18  7:14                       ` Niklas Holsti
2014-02-18  8:40                         ` Dmitry A. Kazakov
2014-02-18  9:00                           ` Niklas Holsti
2014-02-18  9:31                             ` Dmitry A. Kazakov
2014-02-19  8:36                               ` Niklas Holsti
2014-02-19  9:40                                 ` Dmitry A. Kazakov [this message]
2014-02-19 13:20                                   ` Niklas Holsti
2014-02-19 14:13                                     ` Dmitry A. Kazakov
2014-02-19 15:37                                       ` Georg Bauhaus
2014-02-19 16:32                                         ` Laurent
2014-02-19 17:46                                           ` Simon Clubley
2014-02-20  2:39                                         ` Dennis Lee Bieber
2014-02-20 11:44                                           ` G.B.
2014-02-19 21:45                                       ` Niklas Holsti
2014-02-20  9:52                                         ` Dmitry A. Kazakov
2014-02-20 18:19                                           ` Niklas Holsti
2014-02-19 15:06                                     ` Robert A Duff
2014-02-19 17:03                                       ` Niklas Holsti
2014-02-19 22:30                                         ` Robert A Duff
2014-02-17 18:13                 ` Simon Clubley
2014-02-17 20:09                   ` Dmitry A. Kazakov
2014-02-18  7:50                     ` Georg Bauhaus
2014-02-18  8:28                       ` Dmitry A. Kazakov
2014-02-17 20:22                   ` Niklas Holsti
2014-02-18  0:50                     ` Simon Clubley
2014-02-18  6:56                       ` Niklas Holsti
2014-02-18  8:04                         ` Georg Bauhaus
2014-02-19 22:01                     ` Robert A Duff
2014-02-20  8:25                       ` Dmitry A. Kazakov
2014-02-20 15:54                         ` Robert A Duff
2014-02-20 17:54                           ` Dmitry A. Kazakov
2014-02-20 20:45                       ` Niklas Holsti
2014-02-19 21:52                   ` Robert A Duff
2014-02-20  0:50                     ` Simon Clubley
2014-02-19 21:46                 ` Robert A Duff
2014-02-20  0:09                   ` Jeffrey Carter
2014-02-20  1:09                     ` Simon Clubley
2014-02-20  7:06                       ` Niklas Holsti
2014-02-20 13:05                         ` Simon Clubley
2014-02-20 11:51                       ` G.B.
2014-02-20 12:53                         ` Simon Clubley
2014-02-21 11:50                       ` Brian Drummond
2014-02-23 21:37                         ` AdaMagica
2014-02-23 23:23                           ` Bill Findlay
2014-02-24  4:29                           ` AdaMagica
2014-02-24 12:22                           ` Brian Drummond
2014-02-24 19:03                             ` AdaMagica
2014-02-20 20:02                   ` Niklas Holsti
2014-02-19 21:15               ` Robert A Duff
2014-02-19 22:01                 ` Simon Clubley
2014-02-16 14:50         ` Mike H
2014-02-17 16:09         ` Laurent
2014-02-17 17:42           ` Mike H
2014-02-18  1:05             ` Dennis Lee Bieber
2014-02-17 22:31           ` Jeffrey Carter
2014-02-19 12:51             ` Laurent
replies disabled

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