comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Your wish list for Ada 202X
Date: Mon, 7 Apr 2014 20:15:10 -0500
Date: 2014-04-07T20:15:10-05:00	[thread overview]
Message-ID: <lhviiu$q77$1@loke.gir.dk> (raw)
In-Reply-To: 1aa804jg9qq4o$.wdiq33yo621l.dlg@40tude.net

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:1aa804jg9qq4o$.wdiq33yo621l.dlg@40tude.net...
> On Wed, 2 Apr 2014 17:39:06 -0500, Randy Brukardt wrote:
>
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:1cdsyxjzsfgzm.1synpaujysv21$.dlg@40tude.net...
>> ...
>>>>> Of course The former
>>>>> would be greatly preferable. This requires yet another feature Ada
>>>>> lacks -
>>>>> interface inheritance. Unbounded_String must drop parent's
>>>>> implementation/representation and inherit only the interface.
>>>>
>>>> That's not the problem at all. (The parent here would have no
>>>> representation, so there is nothing to drop.)
>>>
>>> Unbounded_String will be derived from String, or String derived from
>>> Unbounded_String. The point is to keep it a hierarchy.
>>
>> Why? There is no interesting relationship between String and
>> Unbounded_String other than the interface (which is inherited from the 
>> root
>> type).
>
> The relationship is that you can mix Unbounded_String and String in
> operations like "&".

Yeah, just like mixing apples and oranges. Mixed operations are not the Ada 
way of typing.

>> There is no opportunity to share implementations, which is the other
>> reason to inherit one from another.
>
> Most of implementations of String can be shared by Unbounded_String. This
> is what people do manually all the time converting Unbounded_String to
> String and back.

No, not really. Most implementations of Root_String'Class could be shared 
amongst string types. But specific implementations are tied to particular 
representations; that's exactly what we want to get rid off.

Moreover, there cannot be automatic sharing of operations; that weakens the 
type system. One only wants to share operations that are explicitly intended 
to be shared; that's the point of declaring packages operating on 
Root_String'Class rather than some specific type.

>> Just inheriting things because something *thinks* they should be related 
>> is
>> silly. There is no advantage to using String'Class (if such a thing 
>> existed)
>> rather than Root_String'Class, since all the former does is restrict what
>> your subprogram can do; it doesn't add any capability.
>
> You have just said that constrained types are useless. What is the
> advantage of using String (1..80). It does not add any capability...

Constrained types *are* useless -- Ada has no such thing. It only has 
unconstrained types (remember that names only apply to subtypes). And in 
particular, a constrained class-wide type is an evil thing, because it's 
mixing things that should not be mixed: relaxing and tightening constraints 
at the same time.

>>> And the real problem
>>> with all that is that there is more than one vector of inheritance:
>>> 1. memory management (fixed, bounded, unbounded)
>>> 2. range (character, wide_character, wide_wide_character)
>>> 3. encoding (UCS-4, UCS-2, UTF-8, ASCII)
>>
>> 1 and 3 are irrelevant, because they shouldn't have any effect on the
>> interface -- they're things that should be totally hidden outside of
>> streaming for 3. Perhaps 2 should have some affect on the interfaces, but
>> that's easily handled with a second level of abtsract types defining 
>> those
>> interfaces.
>
> Presently 1-3 are exposed, and I don't understand how you are you going to
> hide them:
>
>   type A (Length : Positive) is record
>       X : String (1..Length);
>   end record;
>
>   type B is record
>       X : Unbounded_String;
>   end record;
>
> Looks a quite visible difference to me.

Object declarations of course use concrete, specific types. So what's your 
point? The majority of operations would take Root_String'Class and thus work 
on any object. Ones that don't would have been restricted for some good 
reason, and would work as now. What's so hard about that?

>> Besides, 1 can totally be defined after the fact with packages. That's 
>> the
>> model that I'm suggesting.
>
> This is equivalent to deriving from fixed string, which is the common
> denominator.

No, I'm deriving from an abstract type with no representation. There's a 
huge difference.

>> "Unbounded_String" is a container for a
>> Root_String'Class type; it adds unbounded memory management to whatever 
>> the
>> string type does. There is no reason that one has to do that as part of 
>> the
>> string abstraction.
>
> But then you necessarily loose all operations String cannot have, e.g.
> Append, Replace, etc. The idea is of course that Unbounded_String,
> Unbounded_Wide_Wide_String, Unbounded_UTF8_String share this interface.

Ada.Strings.Fixed has all of those operations. Why would we lose them? The 
problem with Ada.Strings as it is is that the operations are subtly 
different; there's no good reason for that.

...
>> You would have
>> to qualify all string literals in an MD world, and that's something
>> programmers would never tolerate.
>
> Ambiguity of literals can be resolved using preference rules like ones
> invented for Universal_Integer. We could introduce Universal_String etc.

That doesn't work at all; universal integer only has a preference against 
itself. All other types are equal. So you still have problem of being unable 
to tell between String and Unbounded_String. And preference rules for 
user-defined types cause all kinds of visibility and maintenance headaches.



> Another method could be making Latin-1 literals contravariant String, i.e.
>
> package Dont_Make_Me_Primitive is
>   function "A" return String;
>   function "AB" return String;
>   function "ABC" return String;
>   ...
> end Dont_Make_Me_Primitive;
>
> not inherited by Unbounded_String, Wide_String etc. That will introduce
> desired preference.

Then Unbounded_String will not have any literals, and you'd still have 
problems with Wide_Wide_String vs. String.

> And, yes, you will be able to assign "ABC" to Unbounded_String because 
> ":="
> is a MD operation with one body dealing with that:
>
>   procedure ":=" (Left : in out Unbounded_String; Right : String);

But that's unimplementable.

> Otherwise, yes, preference rules are necessary to resolve
>
>   A & B & C
>
> Between
>
>   String'(A & B) & C
>
> and
>
>   Unbounded_String'(A & B) & C

Right, and such preferences are always trouble in a programming language. 
They are a prime source of beaujolais effects, which Ada considers 
completely unacceptable. (Adding or removing a declaration should never 
change a legal program into a different legal program with a different 
meaning.)

>>>> We can't get rid of these problematical operations -- it would be way 
>>>> too
>>>> incompatible. So new packages is the only way to go.
>>>
>>> You can, and everything will stay compatible if the type system is fixed
>>> first (MD, MI etc). Within present type system it is indeed unfixable 
>>> and
>>> moreover, new packages will likely become as messy as the old ones.
>>
>> As I said before, I am skeptical that an MD system (even ignoring MI) 
>> could
>> be implemented efficiently enough to be used in critical operations like
>> strings. As soon as you go to MD, the linear tag model has to ba 
>> abandoned,
>> and some sort of search mechanism used for finding bodies to dispatch to.
>
> An MD operation needs an N-D array indexed by tags of controlling
> arguments. Dispatching is indexing the array.

Sure, but you can't represent the array that way, because you don't know N 
at compile-time (someone can define new types and link them in after the 
fact). And even if you did, it would be an impracticaly large a data 
structure in most cases. (Consider that there are something like 20 string 
types in a Root_String'Class model, or that there are around 100 window 
types in Claw.) That being the case, you have to use some sort of lookup 
scheme, and whether that can be efficient enough is a question.

> (However there are serious problems with implementation of MD which I have
> no idea how to resolve. MI is much simpler)

I suppose MI is simpler, but it has a similar problem with tag construction. 
(At least there is only one dimension for interfaces; full MI would turn 
things into a much worse situation, as hidden types would have to be 
allowed - and then its possible for a type to have multiple copies of the 
same interface.)

                               Randy.


  reply	other threads:[~2014-04-08  1:15 UTC|newest]

Thread overview: 240+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-25 21:41 Your wish list for Ada 202X Stoik
2014-03-25 22:14 ` Simon Wright
2014-03-26  6:25 ` Shark8
2014-03-26 20:41   ` Randy Brukardt
2014-03-27  9:20     ` Shark8
2014-03-27 21:50       ` Randy Brukardt
2014-03-28  1:54         ` Jeffrey Carter
2014-03-28  8:17         ` Dmitry A. Kazakov
2014-03-28 21:27           ` Randy Brukardt
2014-03-29  9:44             ` Dmitry A. Kazakov
2014-03-31 23:55               ` Randy Brukardt
2014-04-01  8:20                 ` Dmitry A. Kazakov
2014-04-01 10:51                   ` G.B.
2014-04-01 12:40                     ` Dmitry A. Kazakov
2014-04-02 22:39                   ` Randy Brukardt
2014-04-03  2:59                     ` Shark8
2014-04-05 11:10                     ` Dmitry A. Kazakov
2014-04-08  1:15                       ` Randy Brukardt [this message]
2014-04-08  9:15                         ` Dmitry A. Kazakov
2014-04-08 10:15                           ` G.B.
2014-04-08 10:56                             ` Dmitry A. Kazakov
2014-04-08 23:37                           ` Randy Brukardt
2014-04-09 10:40                             ` Dmitry A. Kazakov
2014-04-10  3:28                               ` Randy Brukardt
2014-04-10  8:42                                 ` Georg Bauhaus
2014-04-10 21:52                                   ` Randy Brukardt
2014-04-10 15:31                                 ` Dmitry A. Kazakov
2014-04-10 22:08                                   ` Randy Brukardt
2014-04-11  6:20                                     ` Dmitry A. Kazakov
2014-04-11 21:34                                       ` Randy Brukardt
2014-04-10 22:39                                   ` Randy Brukardt
2014-04-11  6:40                                     ` Dmitry A. Kazakov
2014-04-11 21:44                                       ` Randy Brukardt
2014-04-12  8:45                                         ` Dmitry A. Kazakov
2014-04-14 23:39                                           ` Randy Brukardt
2014-04-15  7:55                                             ` Dmitry A. Kazakov
2014-04-15 21:27                                               ` Randy Brukardt
2014-04-16  7:52                                                 ` Dmitry A. Kazakov
2014-04-16 21:53                                                   ` Randy Brukardt
2014-04-17  7:39                                                     ` Dmitry A. Kazakov
2014-04-17 17:29                                                       ` Randy Brukardt
2014-04-17 19:54                                                         ` Dmitry A. Kazakov
2014-04-11 19:04                                   ` Niklas Holsti
2014-04-11 20:43                                     ` Dmitry A. Kazakov
2014-04-11 22:04                                       ` Niklas Holsti
2014-04-12  8:20                                         ` Dmitry A. Kazakov
2014-04-12  8:39                                           ` Nasser M. Abbasi
2014-04-12  9:38                                             ` Dmitry A. Kazakov
2014-04-12  9:55                                               ` Georg Bauhaus
2014-04-12 10:45                                                 ` Dmitry A. Kazakov
2014-04-14 23:45                                                   ` Randy Brukardt
2014-04-12 10:17                                               ` Nasser M. Abbasi
2014-04-12 10:48                                                 ` Dmitry A. Kazakov
2014-04-13 19:43                                           ` Niklas Holsti
2014-04-13 21:07                                             ` Dmitry A. Kazakov
2014-04-18 19:10                                               ` Niklas Holsti
2014-04-18 21:18                                                 ` Dmitry A. Kazakov
2014-04-19  7:35                                                   ` Niklas Holsti
2014-04-19  8:19                                                     ` Dmitry A. Kazakov
2014-04-19  8:39                                                       ` Dmitry A. Kazakov
2014-04-19  9:08                                                         ` Niklas Holsti
2014-04-19 10:06                                                           ` Dmitry A. Kazakov
2014-04-19 13:53                                                             ` Niklas Holsti
2014-04-19 14:21                                                               ` Dmitry A. Kazakov
2014-04-19 18:28                                                                 ` Niklas Holsti
2014-04-19  9:05                                                       ` Niklas Holsti
2014-04-19 10:18                                                         ` Dmitry A. Kazakov
2014-04-15  0:08                                             ` Randy Brukardt
2014-04-15  7:21                                               ` Natasha Kerensikova
2014-04-15 21:20                                                 ` Randy Brukardt
2014-04-16  6:32                                                 ` Niklas Holsti
2014-04-16  7:24                                                   ` Natasha Kerensikova
2014-04-16  7:31                                                   ` Dmitry A. Kazakov
2014-04-16  9:30                                                   ` Redispatching (was: Your wish list for Ada 202X) J-P. Rosen
2014-04-16 19:53                                                     ` Redispatching Niklas Holsti
2014-04-17  7:26                                                       ` Redispatching Dmitry A. Kazakov
2014-04-17  8:22                                                         ` Redispatching Georg Bauhaus
2014-04-18 20:08                                                         ` Redispatching Niklas Holsti
2014-04-18 20:51                                                           ` Redispatching Dmitry A. Kazakov
2014-04-19  9:17                                                             ` Redispatching Georg Bauhaus
2014-04-19 10:58                                                               ` Redispatching Dmitry A. Kazakov
2014-04-19 11:21                                                                 ` Redispatching Georg Bauhaus
2014-04-17  8:53                                                       ` Redispatching J-P. Rosen
2014-04-16 21:44                                               ` Your wish list for Ada 202X Niklas Holsti
2014-04-16 22:27                                                 ` Randy Brukardt
2014-04-18 19:59                                                   ` Niklas Holsti
2014-04-18 21:28                                                     ` Randy Brukardt
2014-04-19  8:14                                                       ` Niklas Holsti
2014-04-21 23:09                                                         ` Randy Brukardt
2014-04-22  6:08                                                           ` Niklas Holsti
2014-04-22  8:02                                                           ` Dmitry A. Kazakov
2014-04-22  8:30                                                             ` Shark8
2014-04-22  9:14                                                               ` Dmitry A. Kazakov
2014-04-22 23:23                                                                 ` Randy Brukardt
2014-04-23  7:45                                                                   ` Dmitry A. Kazakov
2014-04-23 19:43                                                                     ` Shark8
2014-04-23 20:00                                                                       ` Dmitry A. Kazakov
2014-04-23 21:28                                                                         ` Shark8
2014-04-24  7:30                                                                           ` Dmitry A. Kazakov
2014-04-24 15:20                                                                             ` Shark8
2014-04-24 16:19                                                                               ` Dmitry A. Kazakov
2014-04-24 16:50                                                                                 ` Shark8
2014-04-24 16:57                                                                                   ` Dmitry A. Kazakov
2014-04-19 10:02                                                       ` Georg Bauhaus
2014-03-27 22:06       ` Randy Brukardt
2014-03-28  5:23         ` Shark8
2014-03-26  8:17 ` Dmitry A. Kazakov
2014-03-26  9:02   ` J Kimball
2014-03-26  9:27     ` Dmitry A. Kazakov
2014-03-26 10:30       ` Marius Amado-Alves
2014-03-26 15:11         ` G.B.
2014-03-26 21:55       ` Simon Clubley
2014-03-26 15:03     ` G.B.
2014-03-26 22:00     ` Simon Clubley
2014-03-26 16:01   ` Anh Vo
2014-03-26 17:04     ` Dmitry A. Kazakov
2014-03-27 15:03       ` Dan'l Miller
2014-03-27 16:02         ` Dmitry A. Kazakov
2014-03-26 16:17   ` Stoik
2014-03-26 17:15     ` Dmitry A. Kazakov
2014-03-26 18:04     ` G.B.
2014-03-26 18:47       ` Simon Wright
2014-03-26 19:51         ` Georg Bauhaus
2014-03-27 14:43       ` Jacob Sparre Andersen
2014-03-27 22:50         ` Randy Brukardt
2014-03-28  5:22           ` J-P. Rosen
2014-03-28  7:54           ` Jacob Sparre Andersen
2014-03-28 21:22             ` Randy Brukardt
2014-03-26 21:06     ` Randy Brukardt
2014-03-26 23:15       ` J Kimball
2014-03-27  8:26       ` Dmitry A. Kazakov
2014-03-27 10:54         ` Georg Bauhaus
2014-03-27 15:42           ` Dmitry A. Kazakov
2014-03-27 21:35         ` Randy Brukardt
2014-04-29 14:26       ` Tero Koskinen
2014-04-29 15:39         ` Dan'l Miller
2014-04-29 17:10         ` Simon Clubley
2014-04-29 17:13           ` Tero Koskinen
2014-04-29 19:42             ` Simon Clubley
2014-03-30 12:28 ` francois_fabien
2014-03-30 13:40   ` Luke A. Guest
2014-03-30 14:24     ` Simon Clubley
2014-03-30 18:48       ` Luke A. Guest
2014-03-30 19:22         ` Dmitry A. Kazakov
2014-03-30 14:28     ` Simon Clubley
2014-03-30 15:14       ` Peter Chapin
2014-03-30 18:48         ` Luke A. Guest
2014-03-30 18:48       ` Luke A. Guest
2014-03-30 23:41         ` Simon Clubley
2014-03-31 15:39     ` Adam Beneschan
2014-03-30 13:46   ` Simon Clubley
2014-03-30 19:02   ` Pascal Obry
2014-03-30 19:33     ` Dmitry A. Kazakov
2014-03-30 19:59       ` Pascal Obry
2014-03-31 15:13         ` Stoik
2014-03-31 16:22           ` Pascal Obry
2014-03-31 16:47           ` Pascal Obry
2014-03-31 18:59           ` Dmitry A. Kazakov
2014-04-05  8:28       ` Pascal Obry
2014-04-05 11:06         ` Georg Bauhaus
2014-04-05 11:20           ` Pascal Obry
2014-04-02 16:21 ` Britt
2014-04-02 22:53   ` Randy Brukardt
2014-04-03  0:01     ` Jeffrey Carter
2014-04-03  5:51       ` Pascal Obry
2014-04-03  6:27         ` Jeffrey Carter
2014-04-03 17:18           ` Pascal Obry
2014-04-03 19:11             ` Dan'l Miller
2014-04-03 19:18             ` Dan'l Miller
2014-04-03 21:17             ` Randy Brukardt
2014-04-04  0:29               ` Jeffrey Carter
2014-04-04  8:20                 ` Stefan.Lucks
2014-04-04 19:52                   ` J Kimball
2014-04-04 20:43                     ` Randy Brukardt
2014-04-04 20:54                       ` Shark8
2014-04-04 21:47                       ` Luke A. Guest
2014-04-08  0:47                         ` Randy Brukardt
2014-04-08  4:43                           ` J Kimball
2014-04-08  5:25                             ` Jeffrey Carter
2014-04-08 23:44                             ` Randy Brukardt
2014-04-04 20:53                 ` Randy Brukardt
2014-04-04 23:25                   ` Jeffrey Carter
2014-04-03  6:30         ` Georg Bauhaus
2014-04-03  0:06     ` Britt
2014-04-03 15:15   ` Robert A Duff
2014-04-03 20:19     ` Qun-Ying
2014-04-03 22:56       ` Robert A Duff
2014-04-04 18:31 ` Dan'l Miller
2014-04-04 21:08   ` Randy Brukardt
2014-04-05  3:39   ` Peter Chapin
2014-04-04 20:27 ` Shark8
2014-04-14  4:59 ` J Kimball
2014-04-14  6:54   ` Shark8
2014-04-15  0:22     ` Randy Brukardt
2014-04-15  0:18   ` Randy Brukardt
2014-04-15  5:28     ` J Kimball
2014-04-14 22:36 ` Shark8
2014-04-15  8:41   ` J-P. Rosen
2014-04-18  0:55 ` Robert Love
2014-04-18 11:39   ` Simon Wright
2014-04-23 12:55 ` björn lundin
2014-04-23 13:57   ` J-P. Rosen
2014-04-23 14:32     ` björn lundin
2014-04-23 15:43       ` J-P. Rosen
2014-04-23 16:31         ` björn lundin
2014-04-23 16:42           ` J-P. Rosen
2014-04-23 17:51             ` björn lundin
2014-04-23 21:29               ` Pascal Obry
2014-04-23 22:00                 ` J-P. Rosen
2014-04-23 23:48                   ` Shark8
2014-04-24  5:28                     ` J-P. Rosen
2014-04-23 20:11             ` Randy Brukardt
2014-04-23 20:03           ` Randy Brukardt
2014-04-24  9:08             ` björn lundin
2014-04-23 18:02         ` Jeffrey Carter
2014-04-23 20:14           ` Randy Brukardt
2014-04-24  9:16             ` björn lundin
2014-04-24 11:33               ` G.B.
2014-04-24 12:11                 ` björn lundin
2014-04-24 12:32                   ` G.B.
2014-04-23 14:38     ` Dmitry A. Kazakov
2014-04-23 15:46       ` J-P. Rosen
2014-04-23 16:27         ` Dmitry A. Kazakov
2014-04-23 16:40           ` J-P. Rosen
2014-04-23 17:39             ` Dmitry A. Kazakov
2014-04-23 21:40               ` J-P. Rosen
2014-04-24  7:42                 ` Dmitry A. Kazakov
2014-04-24  9:18                   ` J-P. Rosen
2014-04-23 14:06   ` Dmitry A. Kazakov
2014-04-23 14:44     ` björn lundin
2014-04-23 20:28       ` Randy Brukardt
2014-04-24 10:31         ` björn lundin
2014-04-25  1:22           ` Randy Brukardt
2014-04-25  2:19             ` Shark8
2014-04-25  7:31               ` Dmitry A. Kazakov
2014-04-23 14:58     ` björn lundin
2014-04-23 18:05   ` Jeffrey Carter
2014-04-23 19:48   ` Shark8
2014-04-24  9:03     ` G.B.
2014-04-25  1:27       ` Randy Brukardt
replies disabled

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