comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Your wish list for Ada 202X
Date: Wed, 2 Apr 2014 17:39:06 -0500
Date: 2014-04-02T17:39:06-05:00	[thread overview]
Message-ID: <lhi3ia$bos$1@loke.gir.dk> (raw)
In-Reply-To: 1cdsyxjzsfgzm.1synpaujysv21$.dlg@40tude.net

"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). There is no opportunity to share implementations, which is the other 
reason to inherit one from another.

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.

(In any case, in my model [which is designed for minimum change to the 
existing Ada language], String, Wide_String, and Wide_Wide_String stay 
untagged array types; they have no relationship to the hierarchy of 
Root_String'Class, possibly other than being defined in conversions.)

> 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.

Besides, 1 can totally be defined after the fact with packages. That's the 
model that I'm suggesting. "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.

>> The problem is that Unbounded_String defines operations like
>>
>>       function "&" (Left : Unbounded_String; Right : String) return
>> Unbounded_String;
>>
>> which would be ambiguous with the normal "&" if both String and
>> Unbounded_String had string literals (as they must for Root_String_Type 
>> to
>> work).
>
> No, it is unambiguous, because provided Unbounded_String is a descendant 
> of
> String (or reversely)
>
>   function "&" (Left : Unbounded_String; Right : String) return
>      Unbounded_String;
>
> is a part of the implementation of the MD operation
>
>   function "&" (Left, Right : Root_String_Type) return
>      Root_String_Type;

That doesn't help at all. We still don't know which body to execute when a 
string literal is used, because it matches all string types. You would have 
to qualify all string literals in an MD world, and that's something 
programmers would never tolerate.

>> 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. 
(Why? Consider "&". There are three types involved, at least 15 variations 
of those types [encoding * range; many more if one thinks storage has to be 
involved], giving 15**3 possibilities just for that operation alone. It's 
obviously impractical to store that as a flat data structure, especially as 
most slots will be empty.)

The flat tag dispatching model involves a single index into a tag data 
structure, almost always using a compile-time known offset [only univerally 
shared generics have to do something at runtime, and even that's simple]. 
That adds the cost of just a handful instructions and one or two extra 
memory reads [one to get the tag address, one to get the body address] for a 
dispatching call. That's almost never going to be significant, as it is 
dwarfed by parameter passing and the execution of the body. OTOH, if 
dispatching requires looking in various lookup tables to figure out where 
the body address is, that overhead is substantially more expensive and at 
least potentially begins to be a significant part of call overhead.

It's possible that there are things one could do at link-time to cut such 
overhead (there is for MI, for instance), but that would require an all-Ada 
system (which is a rarity these days). I'm skeptical, but I'm not certain so 
I could be convinced otherwise.

                                Randy.




  parent reply	other threads:[~2014-04-02 22:39 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 [this message]
2014-04-03  2:59                     ` Shark8
2014-04-05 11:10                     ` Dmitry A. Kazakov
2014-04-08  1:15                       ` Randy Brukardt
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