comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: GCC 4.0 Ada.Containers Cursor danger.
Date: Fri, 8 Jul 2005 15:03:37 +0200
Date: 2005-07-08T15:03:40+02:00	[thread overview]
Message-ID: <1o398w3zo2zf1$.f1f7tukylueo$.dlg@40tude.net> (raw)
In-Reply-To: 42ce5856$0$22762$9b4e6d93@newsread2.arcor-online.net

On Fri, 08 Jul 2005 12:41:18 +0200, Georg Bauhaus wrote:

> Dmitry A. Kazakov wrote:
> 
>>>As long as we have no clear definition of "location",
>>>the argument can go on.
>> 
>> That's easy. Enumerate all elements in the container [i.e. define an order
>> there.] Location will be that number 1..n.
> 
> I can see about N! ways of enumerating elements in an unordered
> container. Any such enumeration is fine.

No. You cannot use an arbitrary order, because it is an implementation
detail which no user application should rely on. "Location" is either a
contract or does not exist. A naive user might reason: last time I found it
by the iteration number 32. So be it the next time. Is s/he right?

> All I need is the operations
> defined for containers and possibly cursors. There is no need for
> me to think of the possible location of an element in an
> unordered container. I can also pretty much ignore the
> arbitrary order established by the finished enumeration
> in _my_ program.

I think it would be a bad design. Unordered containers should not allow
iteration.

> In fact, I wonder whether it might be useful to have an operation
> that allows picking a really arbitrary element.

No problem if that is a primitive operation, as well as to copy a
container, set theoretic operations (and, or, xor).

> (Could be done in a program using a random number modulo
> the number of elements in the set, and then approaching
> the element by iteration or by index, but I guess this is
> rather slow, at least for sets.)

>>> Or I could be your container
>>>as long as my operations will give you what the operation
>>>descriptions tell. Do I have to tell you where (and whether)
>>>I store your information in locations?
>> 
>> You did, if elements are ordered.
> 
> But elements aren't ordered when I play the part of the hashed
> set container, and decide to hide any internal order.

Then elements are unordered, a hash function is the parameter.

> Even if I, the hashed set container, store your elements in some
> internal order, I'm allowed to change locations of elements at will,
> as a function of execution time, as long as A.18 isn't violated.
> Provided I store elements in locations at all, and do not remember
> them in a different way.
> I'm just not allowed to disturb your algorithms. For example,
> I have to make sure that when you call Next, I present to you
> a cursor to some (!) next element. No need for a location.
> An order may be established *after* the fact. During iteration,
> the elements have been presented in some order, but this order may be
> quite volatile. So from this perspective there is no need to
> think of the location of an element in this container. I find
> it misleading to do so.

This is why it is IMO safer to provide no iteration here, because the order
is in fact arbitrary. There could be other ways. For example: one could
provide a "Sort" operation which would return a sorted container. That
container can be iterated.

The order iteration is based on has to be documented. I.e. the user should
know how and when the operations on the container influence that order.
When order is induced by some "hard" facts as below, then you can document
it. But I cannot see a way to document an implementation detail!
 
>>>>BTW the parameters of the type Cursor are routinely named
>>>>"Position"!
>>>
>>>Anything better?
>> 
>> "Element", isn't cursor <=> element? (:-))
> 
> What about No_Element then?

Are you now defending my point? (:-))

>>>>>I don't think there an implied requirement to think of locations.
>>>>
>>>>Then you have to throw out "Next", "First" etc.
>>>
>>>I don't understand. I'm just thinking in terms of elements
>>>and cursors that designate elements.
>> 
>> But the elements type don't have "Next" and "First". If Integer X is in A
>> then Integer'Succ (X) is not necessarily in A. And A'First is not
>> necessarily Integer'First.
> 
> Well, yes, but containers can store
> non-scalar values, too. Did you mean that if some value is an
> element in a container, then another element given by its successor
> in the type should be an element in the container, too?
> Like numbers defined by the Peano axioms? How could I store
> pointers in hashed sets, then, that have no 'succ?
> 
>>>There are subprograms
>>>named Next, First, etc. with a description of what they do.
>>>Where is the pressing need for a location? How do you use
>>>"location" in your programs?
>>  
>> A (Location) := X;
> 
> For vectors, yes, that is the Index_Type. For containers
> like hashed sets I don't see how location should be needed.

Right, and what should "Replace" mean for a hashed set? Is it
Remove/Insert? Which influence does it have on iterations?

>>>>As I said before, it is difficult if possible to assign any definite
>>>>semantics to cursors, such that would be consistent across all operations
>>>>on them.
>>>
>>>Could you explain some inconsistencies among the Cursor
>>>operations?
>> 
>> What is the semantics they implement? See your example with Next. We have:
>> 
>> 1. An order defined on elements (=locations in some "pre-container" (:-))
> 
> It isn't always relevant that some Ada types are ordered, some not.
> Not every container needs elements that can be ordered, for a start.

Right.

> Next, First etc. do not have to refer to a type's order if any,
> so why and when should we have to respect the type's ordering in Cursor's
> First, Next etc.?

It is just a possible information source for defining what's going on. To
iterate you have to get an order somewhere. The problem is that having at
least three ways to define that order, it becomes quite difficult to bring
all types of containers supporting iterations under one roof.

>> 2. An order defined by the container (=locations)
> 
> What is this? Ordered containers can be made to exhibit a kind of
> ordered collection only because (a) they are made for this
> and (b) because you, the programmer, provides ordering
> functions or (c) if your algorithm orders the elements.
> What other order needs to be defined by an unordered set?
> How does it make sense to speak of the unique location of an
> element in an unordered set?

It does not. But it does in an ordered set. Also see above.

>> 3. Instances of elements (value semantics)
> 
> ?

The values you are working with.

>> 4. References to elements (=locations in some third container! (:-))
> 
> Which third container is this? A container of references?

The memory pool the objects live in.

>> We need to define what "Next" does in terms of 1-4.
> 
> Uhm, why is that?

Because I cannot think up 5,6... (:-)) Which other sources for ordering
exist?

>> In other cases 2
>> could be an order completely unrelated to 1, like it is in the case of
>> unsorted arrays.
> 
> I think that in other cases an order could be completely redundant. ;-)

Exactly!

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



  reply	other threads:[~2005-07-08 13:03 UTC|newest]

Thread overview: 195+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-04 11:01 GCC 4.0 Ada.Containers Cursor danger Dmitriy Anisimkov
2005-07-04 18:56 ` Georg Bauhaus
2005-07-04 19:07   ` Georg Bauhaus
2005-07-05  4:27   ` Dmitriy Anisimkov
2005-07-05 15:01     ` Matthew Heaney
2005-07-06  9:10   ` Maxim Reznik
2005-07-06 10:45     ` Georg Bauhaus
2005-07-06 13:57       ` Maxim Reznik
2005-07-06 14:53         ` Georg Bauhaus
2005-07-06 15:09         ` Matthew Heaney
2005-07-06 16:37           ` Dmitriy Anisimkov
2005-07-06 16:43             ` Matthew Heaney
2005-07-06 22:24         ` Randy Brukardt
2005-07-07 10:23         ` Alex R. Mosteo
2005-07-06 12:41     ` Matthew Heaney
2005-07-06 15:37     ` Matthew Heaney
2005-07-06 21:51   ` Randy Brukardt
2005-07-05 14:51 ` Matthew Heaney
2005-07-05 17:11   ` Dmitriy Anisimkov
2005-07-05 18:02     ` Matthew Heaney
2005-07-05 19:08       ` Dmitriy Anisimkov
2005-07-05 19:26         ` Matthew Heaney
2005-07-05 19:44           ` Dmitriy Anisimkov
2005-07-05 20:06             ` Matthew Heaney
2005-07-06  2:10               ` Dmitriy Anisimkov
2005-07-06 22:44                 ` Randy Brukardt
2005-07-07  3:41                   ` Dmitriy Anisimkov
2005-07-07 19:18                     ` Randy Brukardt
2005-07-08  3:01                       ` Dmitriy Anisimkov
2005-07-09  6:17                         ` Simon Wright
2005-07-11  2:24                           ` Dmitriy Anisimkov
2005-07-11  2:24                           ` Dmitriy Anisimkov
2005-07-06  5:52     ` Martin Dowie
2005-07-06  7:02       ` Dmitriy Anisimkov
2005-07-06  8:02         ` Georg Bauhaus
2005-07-06  8:37           ` Dmitriy Anisimkov
2005-07-06  9:06             ` Pascal Obry
2005-07-06 12:14             ` Georg Bauhaus
2005-07-06  7:53       ` Pascal Obry
2005-07-06  8:44         ` Dmitriy Anisimkov
2005-07-06  9:03           ` Pascal Obry
2005-07-06  9:34             ` Dmitriy Anisimkov
2005-07-06  9:42               ` Pascal Obry
2005-07-06  9:45                 ` Dmitriy Anisimkov
2005-07-06 10:40                   ` Georg Bauhaus
2005-07-06 16:22                     ` Dmitriy Anisimkov
2005-07-06 16:42                       ` Matthew Heaney
2005-07-06 16:59                         ` Dmitriy Anisimkov
2005-07-06 17:12                           ` Matthew Heaney
2005-07-06 18:12                       ` Georg Bauhaus
2005-07-07 12:29                         ` Dmitriy Anisimkov
2005-07-07 12:46                           ` Matthew Heaney
2005-07-07 13:01                             ` Dmitriy Anisimkov
2005-07-07 13:20                               ` Matthew Heaney
2005-07-07 13:54                           ` Georg Bauhaus
2005-07-07 17:56                             ` Dmitriy Anisimkov
2005-07-07 22:12                               ` Georg Bauhaus
2005-07-15 18:03                                 ` Dmitriy Anisimkov
2005-07-16  1:45                                   ` Matthew Heaney
2005-07-17  3:55                                     ` Dmitriy Anisimkov
2005-07-17  4:29                                       ` Matthew Heaney
2005-07-07 19:29                           ` Randy Brukardt
2005-07-08  2:41                             ` Dmitriy Anisimkov
2005-07-06 22:56               ` Randy Brukardt
2005-07-06 22:51         ` Randy Brukardt
2005-07-07  0:24           ` Matthew Heaney
2005-07-07  3:20             ` Randy Brukardt
2005-07-06  7:30     ` Dmitry A. Kazakov
2005-07-06  7:50       ` Georg Bauhaus
2005-07-06  8:11         ` Dmitriy Anisimkov
2005-07-06 11:36         ` Dmitry A. Kazakov
2005-07-06 12:14           ` Georg Bauhaus
2005-07-06 23:07           ` Randy Brukardt
2005-07-07  8:01             ` Dmitry A. Kazakov
2005-07-07 10:38               ` Georg Bauhaus
2005-07-07 13:00                 ` Dmitry A. Kazakov
2005-07-07 13:41                   ` Matthew Heaney
2005-07-07 22:12                   ` Georg Bauhaus
2005-07-08  8:48                     ` Dmitry A. Kazakov
2005-07-08 10:41                       ` Georg Bauhaus
2005-07-08 13:03                         ` Dmitry A. Kazakov [this message]
2005-07-08 13:31                           ` Matthew Heaney
2005-07-10  2:12                           ` Randy Brukardt
2005-07-10  8:52                             ` Dmitry A. Kazakov
2005-07-11 10:58                               ` Georg Bauhaus
2005-07-11 12:18                                 ` Dmitry A. Kazakov
2005-07-11 13:50                                   ` Georg Bauhaus
2005-07-11 18:38                               ` Randy Brukardt
2005-07-12  8:44                                 ` Dmitry A. Kazakov
2005-07-12 10:33                                   ` Georg Bauhaus
2005-07-12 20:38                                   ` Randy Brukardt
2005-07-08 13:15                       ` Matthew Heaney
2005-07-08 14:02                         ` Dmitry A. Kazakov
2005-07-08 14:52                           ` Matthew Heaney
2005-07-11 14:57                             ` MMM
2005-07-11 18:36                               ` Georg Bauhaus
2005-07-12  2:11                                 ` MMM
2005-07-12 21:47                                   ` Randy Brukardt
2005-07-13  4:31                                     ` MMM
2005-07-13  1:15                                   ` Georg Bauhaus
2005-07-13  2:46                                     ` Matthew Heaney
2005-07-14  4:11                                     ` Mikhail Terekhov
2005-07-14 12:44                                       ` Matthew Heaney
2005-07-19  1:38                                         ` Mikhail Terekhov
2005-07-19  3:21                                           ` Matthew Heaney
2005-07-14 23:03                                       ` Georg Bauhaus
2005-07-15  8:36                                         ` Dmitry A. Kazakov
2005-07-15 10:39                                           ` Georg Bauhaus
2005-07-15 14:10                                             ` Dmitry A. Kazakov
2005-07-15 12:10                                           ` Matthew Heaney
2005-07-19  3:51                                             ` Mikhail Terekhov
2005-07-19 11:35                                               ` Matthew Heaney
2005-07-19  3:11                                         ` Mikhail Terekhov
2005-07-19 12:44                                           ` Matthew Heaney
2005-07-20  5:20                                             ` Simon Wright
2005-07-21  2:39                                               ` Matthew Heaney
2005-07-21  3:23                                               ` Randy Brukardt
2005-07-19 23:51                                           ` Randy Brukardt
2005-07-20 15:33                                             ` Robert A Duff
2005-07-11 14:56                         ` MMM
2005-07-11 23:24                           ` Matthew Heaney
2005-07-12  3:05                             ` MMM
2005-07-12  5:32                               ` Simon Wright
2005-07-13  2:41                                 ` MMM
2005-07-12 11:16                               ` Georg Bauhaus
2005-07-16 22:28                                 ` Robert A Duff
2005-07-12 13:32                               ` Marc A. Criley
2005-07-12 14:51                                 ` MMM
2005-07-12 15:35                                   ` Matthew Heaney
2005-07-12 18:40                                     ` MMM
2005-07-12 19:12                                       ` Matthew Heaney
2005-07-12 19:42                                         ` MMM
2005-07-12 20:02                                           ` Georg Bauhaus
2005-07-13  3:52                                             ` MMM
2005-07-12 20:13                                           ` Matthew Heaney
2005-07-12 21:38                                     ` Simon Wright
2005-07-12 17:44                                   ` Marc A. Criley
2005-07-12 18:51                                     ` MMM
2005-07-12 19:15                                       ` Matthew Heaney
2005-07-12 19:47                                         ` Georg Bauhaus
2005-07-13  2:20                                           ` Matthew Heaney
2005-07-12 20:00                                         ` MMM
2005-07-12 20:09                                           ` Georg Bauhaus
2005-07-12 20:15                                           ` Matthew Heaney
2005-07-12 21:01                                           ` Randy Brukardt
2005-07-13  4:16                                             ` MMM
2005-07-19 23:58                                               ` Randy Brukardt
2005-07-12 21:59                                         ` Simon Wright
2005-07-12 20:56                                       ` Randy Brukardt
2005-07-14  5:01                                         ` Mikhail Terekhov
2005-07-20  0:10                                           ` Randy Brukardt
2005-07-07 12:36               ` Matthew Heaney
2005-07-07 12:52             ` Dmitriy Anisimkov
2005-07-07 13:52               ` Georg Bauhaus
2005-07-07 17:49               ` Dmitriy Anisimkov
2005-07-07 18:35                 ` Matthew Heaney
2005-07-08 17:52                   ` Craig Carey
2005-07-07 17:50               ` Dmitriy Anisimkov
2005-07-07 19:47               ` Randy Brukardt
2005-07-08  2:28                 ` Dmitriy Anisimkov
2005-07-09 14:20                   ` Matthew Heaney
2005-07-10  1:51                   ` Randy Brukardt
2005-07-10  5:46                     ` Craig Carey
2005-07-10  6:13                       ` Craig Carey
2005-07-11 17:33                       ` OT: Greg and Colin? (was Re: GCC 4.0 Ada.Containers Cursor danger.) Marc A. Criley
2005-07-06 22:34     ` GCC 4.0 Ada.Containers Cursor danger Randy Brukardt
2005-07-07  0:22       ` Matthew Heaney
2005-07-07  3:17         ` Randy Brukardt
2005-07-08  5:34           ` Jeffrey Carter
2005-07-10  1:53             ` Randy Brukardt
2005-07-10 19:32               ` Jeffrey Carter
2005-07-07  3:24         ` Randy Brukardt
2005-07-16 23:24 ` Matthew Heaney
2005-07-17  4:04   ` Dmitriy Anisimkov
2005-07-17  5:01     ` Matthew Heaney
2005-07-17 17:13       ` Dmitriy Anisimkov
2005-07-17 17:36         ` Matthew Heaney
2005-07-17 17:49           ` Dmitriy Anisimkov
2005-07-17 18:12             ` Matthew Heaney
2005-07-17 17:40       ` Dmitriy Anisimkov
2005-07-17 17:50         ` Dmitriy Anisimkov
2005-07-17 18:08         ` Matthew Heaney
2005-07-19  4:36           ` Mikhail Terekhov
2005-07-20  1:59             ` Matthew Heaney
2005-07-20 14:00               ` Pascal Obry
2005-07-20 14:34                 ` Matthew Heaney
2005-07-20 16:51                   ` Pascal Obry
2005-07-20 16:53                   ` Pascal Obry
2005-07-21  3:18                   ` Randy Brukardt
2005-07-20  2:37             ` Robert I. Eachus
2005-08-02 16:59               ` Craig Carey
2005-08-02 20:55                 ` Simon Wright
2005-07-20  7:20             ` Georg Bauhaus
2005-07-17  9:28     ` Georg Bauhaus
2005-07-17 14:26       ` Matthew Heaney
replies disabled

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