From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Is this expected behavior or not
Date: Wed, 20 Mar 2013 18:57:58 -0500
Date: 2013-03-20T18:57:58-05:00 [thread overview]
Message-ID: <kidie8$6k5$1@munin.nbi.dk> (raw)
In-Reply-To: 1raubw1sk48ca$.69rdgczvnnf.dlg@40tude.net
"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
news:1raubw1sk48ca$.69rdgczvnnf.dlg@40tude.net...
> On Tue, 19 Mar 2013 16:19:54 -0500, Randy Brukardt wrote:
>
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:vo941i7imo8t$.1jjjox9r1hkqa.dlg@40tude.net...
>
>>> It is well possible. Consider tag a constraint as array bounds are.
>>> Allow
>>> constraints (=discriminants) passed independently as compilers already
>>> do
>>> for array bounds. This gives you array interfaces while keeping arrays
>>> as
>>> they are, plain arrays.
>>
>> No, it's not possible. In order to solve the string problem, we have to
>> decouple the representation and the interface. But for slices, you have
>> to
>> know the representation in order to be able to pass it meaningfully.
>
> You pass dope and reference.
You have to know the representation of what you reference in order to access
it, even after the "dope and reference". The only way to handle differing
representations is to pass accessor thunks along with the dope, but that
only allows you to access individual elements. Turning every slice reference
into a loop of thunk calls is just way to complicated for the usage (which
is pretty rare, especially if packages like Unbounded_Strings are made
class-wide).
>> Moreover, the representation is not necessarily an array (UTF-8 encoding
>> is
>> not a normal array if you are using the character interface).
>
> In the dope you have type tag to handle class-wide instances. You will
> dispatch to the body which implements indexing for UTF-8 encoded arrays of
> characters.
If any dispatching is involved, the syntax ought to be that of a function
call. That allows indexing but not slicing.
Even if you are willing to confuse users with implicit dispatching, you're
also talking about turning every slice reference into a loop. The extra
complication would be intolerable for most vendors.
>>>> My rough proposed Root_String_Type would be an abstract tagged type,
>>>
>>> I definitely don't want strings tagged.
>>
>> Then forget it. All composite types ought to be tagged; the root of the
>> existing problem is that arrays aren't tagged.
>
> If you use "tagged" in RM sense as a class of types which a tag embedded
> into the representation, then no. That is not the problem and I don't want
> arrays to have tag. I want array interfaces and an ability to have objects
> of the type A'Class where A is an array type. The representation of
> A'Class
> will have tag. The representation of A will not.
Why do you care? String objects are a lot bigger than a tag, so it can't be
a memory usage concern. The only other place it could possibly matter is
I/O. But for package like Text_IO, a tag and dispatching is exactly what you
want, and for 98% of strings, that's what they ultimately get used for. For
streaming and the like, the representation does not include the tag if you
stream a specific type. So what's the problem??
Removing a tag from an object is an optimization; I believe every object
should have a tag and it's up to the compiler how to implement it. It's
really none of your (the programmer's) business (in the absence of
representation clauses).
...
>> I don't think we
>> need 'Class for access types,
>
> You need them because access types shall implement "access interface." We
> need access interface for user-defined referential types.
Ada 2012 has user-defined referential types. You can do everything you need
with plain-old tagged types.
>> because the effect is essentially the same as
>> what we already have for anonymous access types
>
> I don't see why. I want to be able to declare my own type as an access
> type:
>
> type Handle is private access T;
> private
> type Handle is record
> Connection : DB_Connection_Handle;
> Table : Unbounded_String;
> ... -- etc
> end record;
>
> with the semantics of new, Free, dereferencing defined as I wish.
You can do the latter two in Ada 2012 as it stands; the first can easily be
simulated with a constructor function. (Oh, that's right, you can't stand
constructor functions.)
But in any case, this is a bad idea. You don't want to explicitly handle
memory management in modern programs. Do it under the covers somewhere (like
in the containers packages); do *not* expose access types.
> And I
> want to be able to write a class-wide subprogram which would take both
> Handle and some plain access type as a parameter.
As I said, no new code should be exposing raw access types. Something like
the container Cursor type is a much better way to handle the need for
referential semantics.
...
>> For someone that hates generics, why would you have so many?
>
> I have:
>
> 1. I/O modes of input, output, duplex;
Seems like a runtime parameter, not a compile-time one. (i.e. Mode in the
I/O packages).
> 2. Specific values of types: Integer_n, Unsigned_n, String, Wide_String,
> IEEE_Float_n;
Yes, of course, this is the problem that requires generics, mainly building
things like the Ada containers.
> 3. Devices responsible to handle "registers" holding values;
I don't see how a generic would help here. It is illegal to have most
representation clauses in a generic body, so I don't see how you could even
have a generic in this case. (It certainly wouldn't work in Janus/Ada, can't
talk about GNAT.)
> 4. Handles to registers;
Pretty much the same as the previous. The package involved would be so small
and there would be so few of them (one for each kind of native register
type) that I'd just copy the text and do a block substitution to make a new
one. Generics would just get in the way (and add overhead on a compiler that
does sharing, like Janus/Ada).
> 5. Publishing value change events and monitors of;
Maybe, if you need them to work on multiple types. Seems like a sort of
container, to me.
> 6. Much whished, but practically impossible to do, bounded values.
Seems like that fits under #2 (it's not possible to do these without knowing
the underlying representation, unless you're willing to make them very
expensive with tons of barely necessary exception handlers). Here again, I'd
make a package for each such type that I needed. (That's precisely how this
issue is handled in the Janus/Ada compiler -- no generics in sight.)
> Here you are. On top of that there exist immense problems with explicit
> conversions which needed between, say, a handle to a duplex register, when
> an output one is expected. It is not just N instances it is also 2**N
> combinations of cross operations.
Again, I don't see any good reason to try to separate these things.
>> Maybe you're trying too hard to be Object-Oriented;
>
> I am trying to have it type-safe. It would be just impossible to do in Ada
> 95. In Ada 2005, which has Java interfaces, it gives what I described.
> Lack
> of MI, which is worked around using generics. I guess that MI would slash
> the amount of code by ten. MD would do another tenth.
It's not worth it to be type-safe in this way. Especially as
preconditions/postconditions combined with static analysis give the same
effect (compile time checking) with 10% of the work. There definitely is
such a thing as being too type-safe. Of course, YMMV.
Randy.
next prev parent reply other threads:[~2013-03-20 23:57 UTC|newest]
Thread overview: 242+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-11 19:42 Is this expected behavior or not Anh Vo
2013-03-11 20:01 ` Robert A Duff
2013-03-11 20:41 ` Shark8
2013-03-12 9:27 ` Dmitry A. Kazakov
2013-03-12 17:19 ` Robert A Duff
2013-03-12 17:42 ` Dmitry A. Kazakov
2013-03-12 18:04 ` Georg Bauhaus
2013-03-12 18:21 ` Dmitry A. Kazakov
2013-03-12 22:23 ` Georg Bauhaus
2013-03-13 8:49 ` Dmitry A. Kazakov
2013-03-13 9:45 ` J-P. Rosen
2013-03-13 13:31 ` Dmitry A. Kazakov
2013-03-13 14:34 ` Georg Bauhaus
2013-03-13 15:51 ` Dmitry A. Kazakov
2013-03-13 16:56 ` Jeffrey Carter
2013-03-13 17:09 ` Shark8
2013-03-13 17:32 ` Georg Bauhaus
2013-03-13 19:28 ` Dmitry A. Kazakov
2013-03-13 21:01 ` Randy Brukardt
2013-03-13 21:18 ` Dmitry A. Kazakov
2013-03-14 21:51 ` Randy Brukardt
2013-03-15 1:10 ` Adam Beneschan
2013-03-15 21:22 ` Randy Brukardt
2013-03-15 9:20 ` Dmitry A. Kazakov
2013-03-15 21:43 ` Randy Brukardt
2013-03-16 7:56 ` Dmitry A. Kazakov
2013-03-18 22:52 ` Randy Brukardt
2013-03-19 10:32 ` Dmitry A. Kazakov
2013-03-13 21:37 ` Georg Bauhaus
2013-03-14 11:18 ` Dmitry A. Kazakov
2013-03-14 12:37 ` Georg Bauhaus
2013-03-14 14:26 ` Dmitry A. Kazakov
2013-03-14 14:57 ` Georg Bauhaus
2013-03-14 15:51 ` Anh Vo
2013-03-14 16:21 ` J-P. Rosen
2013-03-14 17:29 ` Dmitry A. Kazakov
2013-03-14 18:16 ` Georg Bauhaus
2013-03-15 9:33 ` Dmitry A. Kazakov
2013-03-15 10:05 ` Georg Bauhaus
2013-03-15 11:15 ` Dmitry A. Kazakov
2013-03-14 22:12 ` Randy Brukardt
2013-03-15 9:46 ` Dmitry A. Kazakov
[not found] ` <ewe0v3ck1xdo$.e8rtuof27ke6$.dlg@40tude.net >
2013-03-15 21:17 ` Randy Brukardt
2013-03-16 7:51 ` Dmitry A. Kazakov
2013-03-16 9:30 ` Georg Bauhaus
2013-03-16 10:27 ` Dmitry A. Kazakov
2013-03-16 11:37 ` Georg Bauhaus
2013-03-16 13:04 ` Dmitry A. Kazakov
2013-03-16 16:10 ` Georg Bauhaus
2013-03-16 17:47 ` Dmitry A. Kazakov
2013-03-18 22:36 ` Randy Brukardt
2013-03-19 10:14 ` Dmitry A. Kazakov
2013-03-19 14:23 ` Georg Bauhaus
2013-03-19 15:13 ` Dmitry A. Kazakov
2013-03-19 16:52 ` Georg Bauhaus
2013-03-19 17:31 ` Dmitry A. Kazakov
2013-03-19 20:07 ` J-P. Rosen
2013-03-19 20:45 ` Dmitry A. Kazakov
2013-03-19 21:59 ` J-P. Rosen
2013-03-20 10:04 ` Dmitry A. Kazakov
2013-03-20 11:01 ` J-P. Rosen
2013-03-20 13:21 ` Dmitry A. Kazakov
2013-03-20 23:31 ` Randy Brukardt
2013-03-21 9:08 ` Dmitry A. Kazakov
2013-03-22 10:23 ` J-P. Rosen
2013-03-22 14:54 ` Dmitry A. Kazakov
2013-03-22 22:18 ` J-P. Rosen
2013-03-22 23:05 ` Shark8
2013-03-23 8:32 ` Dmitry A. Kazakov
2013-03-23 8:14 ` Dmitry A. Kazakov
2013-03-23 9:02 ` J-P. Rosen
2013-03-23 10:19 ` Dmitry A. Kazakov
2013-03-23 21:53 ` J-P. Rosen
2013-03-24 8:17 ` Dmitry A. Kazakov
2013-03-24 8:27 ` J-P. Rosen
2013-03-24 13:01 ` AdaMagica
2013-03-25 8:32 ` Dmitry A. Kazakov
2013-03-25 9:19 ` Georg Bauhaus
2013-03-25 10:08 ` Dmitry A. Kazakov
2013-03-19 21:37 ` Randy Brukardt
2013-03-20 8:48 ` Dmitry A. Kazakov
2013-03-14 16:22 ` Shark8
2013-03-14 17:08 ` Dmitry A. Kazakov
2013-03-13 22:34 ` Robert A Duff
2013-03-14 9:09 ` Dmitry A. Kazakov
2013-03-14 9:27 ` Georg Bauhaus
2013-03-13 17:05 ` Shark8
2013-03-13 17:45 ` Simon Wright
2013-03-13 19:37 ` Dmitry A. Kazakov
2013-03-13 19:54 ` Simon Wright
2013-03-13 20:54 ` Dmitry A. Kazakov
2013-03-13 21:28 ` Simon Wright
2013-03-14 9:16 ` Dmitry A. Kazakov
2013-03-14 16:42 ` Simon Wright
2013-03-14 17:05 ` Dmitry A. Kazakov
2013-03-13 22:12 ` Robert A Duff
2013-03-13 21:47 ` Jeffrey Carter
2013-03-13 21:09 ` Randy Brukardt
2013-03-13 22:48 ` Shark8
2013-03-14 22:01 ` Randy Brukardt
2013-03-15 3:27 ` Shark8
2013-03-15 21:05 ` Randy Brukardt
2013-03-15 21:46 ` Robert A Duff
2013-03-16 5:52 ` Shark8
2013-03-16 7:41 ` Dmitry A. Kazakov
2013-03-16 16:55 ` Shark8
2013-03-16 17:36 ` Dmitry A. Kazakov
2013-03-16 21:51 ` Shark8
2013-03-17 9:36 ` Dmitry A. Kazakov
2013-03-18 23:13 ` Randy Brukardt
2013-03-19 9:12 ` Dmitry A. Kazakov
2013-03-19 21:19 ` Randy Brukardt
2013-03-20 11:21 ` Dmitry A. Kazakov
2013-03-20 23:57 ` Randy Brukardt [this message]
2013-03-21 10:30 ` Dmitry A. Kazakov
2013-03-21 23:27 ` Randy Brukardt
2013-03-22 16:07 ` Dmitry A. Kazakov
2013-03-22 20:10 ` Shark8
2013-03-22 20:51 ` Dmitry A. Kazakov
2013-03-22 23:34 ` Robert A Duff
2013-03-23 8:41 ` Dmitry A. Kazakov
2013-03-23 2:29 ` Nasser M. Abbasi
2013-03-23 2:33 ` Randy Brukardt
2013-03-23 4:44 ` Shark8
2013-03-25 22:24 ` Randy Brukardt
2013-03-26 1:15 ` Shark8
2013-03-23 9:53 ` Dmitry A. Kazakov
2013-03-25 22:58 ` Randy Brukardt
2013-03-26 10:52 ` Dmitry A. Kazakov
2013-03-26 21:31 ` Randy Brukardt
2013-03-27 9:37 ` Dmitry A. Kazakov
2013-03-27 19:42 ` Randy Brukardt
2013-03-28 13:50 ` Dmitry A. Kazakov
2013-03-28 21:55 ` Randy Brukardt
2013-03-29 12:26 ` Dmitry A. Kazakov
2013-03-30 0:49 ` Randy Brukardt
2013-03-30 2:55 ` Shark8
2013-04-01 23:43 ` Messaging question [was: Is this expected behavior or not] Randy Brukardt
2013-03-30 9:20 ` Is this expected behavior or not Dmitry A. Kazakov
2013-04-02 0:40 ` Randy Brukardt
2013-04-02 8:44 ` Dmitry A. Kazakov
2013-04-02 21:54 ` Randy Brukardt
2013-04-03 8:54 ` Dmitry A. Kazakov
2013-04-04 0:04 ` Randy Brukardt
2013-04-04 8:26 ` Dmitry A. Kazakov
2013-04-04 20:31 ` Randy Brukardt
2013-04-05 9:57 ` Dmitry A. Kazakov
2013-04-05 12:45 ` Stefan.Lucks
2013-04-05 12:49 ` Stefan.Lucks
2013-04-05 14:19 ` Dmitry A. Kazakov
2013-04-05 14:44 ` Stefan.Lucks
2013-04-05 16:11 ` Dmitry A. Kazakov
2013-04-05 19:02 ` Stefan.Lucks
2013-04-05 19:34 ` Dmitry A. Kazakov
2013-04-05 20:23 ` Stefan.Lucks
2013-04-06 7:39 ` Dmitry A. Kazakov
2013-04-07 18:10 ` Stefan.Lucks
2013-04-07 18:23 ` Dmitry A. Kazakov
2013-04-05 20:38 ` Stefan.Lucks
2013-04-05 14:36 ` Dmitry A. Kazakov
2013-04-05 15:16 ` Stefan.Lucks
2013-04-05 16:29 ` Dmitry A. Kazakov
2013-04-05 19:55 ` Stefan.Lucks
2013-04-06 1:45 ` Randy Brukardt
2013-04-06 7:54 ` Dmitry A. Kazakov
2013-04-07 18:17 ` Stefan.Lucks
2013-04-07 18:28 ` Dmitry A. Kazakov
2013-04-08 7:48 ` Stefan.Lucks
2013-04-08 8:59 ` Dmitry A. Kazakov
2013-04-08 15:35 ` Stefan.Lucks
2013-04-08 19:08 ` Dmitry A. Kazakov
2013-04-09 7:18 ` Stefan.Lucks
2013-04-09 8:17 ` Dmitry A. Kazakov
2013-04-09 15:20 ` Stefan.Lucks
2013-04-09 16:15 ` Dmitry A. Kazakov
2013-04-09 22:59 ` Randy Brukardt
2013-04-09 22:57 ` Randy Brukardt
2013-04-10 7:30 ` Dmitry A. Kazakov
2013-04-10 8:00 ` Root_String'Class? (Was: Is this expected behavior or not) Jacob Sparre Andersen
2013-04-10 21:48 ` Randy Brukardt
2013-04-09 22:53 ` Is this expected behavior or not Randy Brukardt
2013-04-09 22:45 ` Randy Brukardt
2013-04-10 7:37 ` Dmitry A. Kazakov
2013-04-10 22:15 ` Randy Brukardt
2013-04-11 7:33 ` Dmitry A. Kazakov
2013-04-11 22:37 ` Randy Brukardt
2013-04-12 7:47 ` Dmitry A. Kazakov
2013-04-13 0:26 ` Randy Brukardt
2013-04-13 0:35 ` Randy Brukardt
2013-04-13 7:07 ` Dmitry A. Kazakov
2013-04-06 1:38 ` Randy Brukardt
2013-04-06 1:20 ` Randy Brukardt
2013-04-06 5:20 ` Usefulness of OOP (was Is this expected behavior or not) J-P. Rosen
2013-04-06 10:31 ` Dmitry A. Kazakov
2013-04-06 18:43 ` Georg Bauhaus
2013-04-07 7:00 ` Is this expected behavior or not Dmitry A. Kazakov
2013-04-09 23:24 ` Randy Brukardt
2013-04-10 8:20 ` Dmitry A. Kazakov
2013-04-10 22:07 ` Randy Brukardt
2013-04-11 7:59 ` Dmitry A. Kazakov
2013-04-11 11:10 ` Georg Bauhaus
2013-04-11 13:49 ` J-P. Rosen
2013-04-11 15:07 ` Dmitry A. Kazakov
2013-04-12 4:39 ` J-P. Rosen
2013-04-12 8:00 ` Dmitry A. Kazakov
2013-04-12 9:09 ` J-P. Rosen
2013-04-12 17:00 ` Jeffrey Carter
2013-04-11 23:02 ` Randy Brukardt
2013-04-12 8:17 ` Dmitry A. Kazakov
2013-04-12 9:41 ` Georg Bauhaus
2013-04-12 11:46 ` Dmitry A. Kazakov
2013-04-13 17:38 ` Georg Bauhaus
2013-04-13 0:22 ` Randy Brukardt
2013-04-13 6:49 ` Dmitry A. Kazakov
2013-04-16 1:41 ` Randy Brukardt
2013-04-16 8:03 ` Dmitry A. Kazakov
2013-04-16 22:57 ` Randy Brukardt
2013-04-17 7:18 ` Dmitry A. Kazakov
2013-04-17 9:23 ` Georg Bauhaus
2013-04-17 9:57 ` Dmitry A. Kazakov
2013-04-17 19:38 ` Georg Bauhaus
2013-04-18 11:52 ` Dmitry A. Kazakov
2013-04-19 2:16 ` Randy Brukardt
2013-04-19 7:39 ` Dmitry A. Kazakov
2013-04-19 9:07 ` Georg Bauhaus
2013-04-19 9:11 ` Georg Bauhaus
2013-04-19 12:09 ` Dmitry A. Kazakov
2013-04-19 22:14 ` Randy Brukardt
2013-04-20 6:39 ` Dmitry A. Kazakov
2013-03-19 0:38 ` Shark8
2013-03-19 8:53 ` Dmitry A. Kazakov
2013-03-16 20:45 ` Robert A Duff
2013-03-16 9:29 ` Georg Bauhaus
2013-03-16 20:49 ` Robert A Duff
2013-03-14 22:41 ` Florian Weimer
2013-03-12 23:21 ` Randy Brukardt
2013-03-12 23:14 ` Randy Brukardt
2013-03-11 20:43 ` Anh Vo
2013-03-11 22:32 ` Randy Brukardt
2013-03-11 22:38 ` Robert A Duff
2013-03-12 9:17 ` Dmitry A. Kazakov
2013-03-13 0:10 ` 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