comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Generic Package
Date: Wed, 2 May 2007 19:37:35 -0500
Date: 2007-05-02T19:37:35-05:00	[thread overview]
Message-ID: <f1baol$jbd$1@jacob-sparre.dk> (raw)
In-Reply-To: 40irbbzm2t.fsf@hod.lan.m-e-leypold.de

"Markus E Leypold"
<development-2006-8ecbb5cc8aREMOVETHIS@ANDTHATm-e-leypold.de> wrote in
message news:40irbbzm2t.fsf@hod.lan.m-e-leypold.de...
> "Randy Brukardt" <randy@rrsoftware.com> writes:
>
> > "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
> > news:1ozvzzh59ebq8$.yeh9do8s3hig$.dlg@40tude.net...
> >> On Tue, 01 May 2007 15:42:21 +0200, Georg Bauhaus wrote:
> > ...
> >> > Yes, in the sense that the specifics of memory layout and such are
> >> > unknown and irrelevant to the client; in particular, no order needs
> >> > to be specified.
> >>
> >> Apart from obvious uselessness of contracts referencing to the memory
> >> layout, the above is self-contradictory. Memory layout defines an
order.
> > It
> >> also is a part of the contract. Hence the interface is ordered.
> >
> > And now all is clear.
>
> No. The only thing that is clear to me, is, that DK is splitting hairs
> again, just to win the argument.

Maybe, but that's just name calling and is never an appropriate way to
conduct an argument. Besides, you're going to claim the same about me in
your reply to this message... ;-)

> > It is impossible to implement a set with having some form of order. So,
for
>                       ^^^^^^^^^
>
> Implement, yes. But it is possible to implement a set interface
> without forcing the user to provide an order function to instantiate
> the set. It is also possible to provide a mechanism for such an
> implementation that gives you all the elements in this set in some
> arbitary order/sequence which might change with every invocation. This
> is called iteration.

You're repeating the obvious. But a set where you don't specify the order is
still an ordered set: there exists an order between the elements, even if
you don't know what it is and don't have to describe it.

> DK originally stated, it is not possible to iterate over an unordered
> set: It is.

I actually agree with DK, using his definitions. The problem is that no such
set could ever be constructed (even on a piece of paper, the elements have
an order). So the fact is completely irrelevant: there is no such thing as
an unordered set.

> It is possible to specify the contract for this iteration without
> referring to an order (I did it in one of my recent post). DK denied
> this. He is wrong.

Of course you can if you assume primitives that effectively give you an
order. It's like specifying a contract for set inclusion: you certainly can
do so, but it is unlikely to say anything interesting: it's mostly likely
going to be a tautology.

> Implementing a set as a linked list might not be efficient enough for
> a large number of items -- still: It is a set in any sane sense and
> one can provide an interface to iterate over the items. And it has
> even been implemented without using an order defined on the elements
> of the set.

Yes, and so what? It still has an order between elements. That order doesn't
have to be determined by the values of the elements, as you seem to be
assuming. It could be determined by the address of the memory used or the
ordering of some handle type, or by phase of the moon. But it isn't possible
to have a set of elements without some order (at least on the sorts of
machines that Ada was intended to program).

> So the even the statement "one cannot implement a set (with or without
> iteration) without providing an order over the elements" is plainly
> wrong.

A linked list sure;y provides an order for the elements. Why you insist on
that order coming from the outside is beyond me. Even as hashed set doesn't
meet your requirements for "order", which is completely ridiculous.

> (And no: The linked list doesn't define an order on all possible
> elements of the set.)

An who cares about that? Any particular set of elements has an order. I
don't much care if a different set object has a different order on the same
elements. It's irrelevant. "An order" is not the same as "a defined order"
or "the same order for any pair of elements with the same value".

Indeed, any ordering between the values of the elements is completely
unrelated to the abstract set properties. Any operations that depend on such
an order are not set operations at all.

In any case, this is an Ada forum, and abstractions that you cannot describe
in Ada are simply not relevant (certainly not as the basis of containers).
Any Ada implementation will have some implied ordering between the elements
in the set.

My contention always has been that "sets" are an irrelevant abstraction from
a programming perspective. They're too inefficient to use for any purpose.
What Ada.Containers calls a set is really a map where the keys are included
as part of the elements. Yes, they have some set operations because some
people thought if they were called sets they should have those operations. I
would have preferred choosing a more sane name, but whatever.

And I would hope that I was done reading this bulls***, but I'm sure I'm
not...

                           Randy.





  reply	other threads:[~2007-05-03  0:37 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-25 22:15 Generic Package andrew.carroll
2007-04-26  0:07 ` Jeffrey R. Carter
2007-04-26  7:46   ` Markus E Leypold
2007-04-26  6:02 ` Martin Krischik
2007-04-26  7:57 ` Dmitry A. Kazakov
2007-04-26 15:31 ` andrew.carroll
2007-04-26 16:07   ` Georg Bauhaus
2007-04-26 19:40     ` andrew.carroll
2007-04-26 20:01       ` Georg Bauhaus
2007-04-26 18:54   ` Dmitry A. Kazakov
2007-04-26 21:52     ` Simon Wright
2007-04-27  9:00       ` Dmitry A. Kazakov
2007-04-27 11:11         ` Georg Bauhaus
2007-04-27 12:06           ` Dmitry A. Kazakov
2007-04-27 12:52             ` Markus E Leypold
2007-04-27 14:10             ` Georg Bauhaus
2007-04-27 14:16               ` Dmitry A. Kazakov
2007-04-27 21:44                 ` Georg Bauhaus
2007-04-28  7:38                   ` Dmitry A. Kazakov
2007-04-28 17:50                     ` Simon Wright
2007-04-28 21:04                     ` Ray Blaak
2007-04-29 16:33                       ` Markus E Leypold
2007-04-27 19:44             ` Simon Wright
2007-04-27 20:34               ` Dmitry A. Kazakov
2007-04-27 21:16                 ` Simon Wright
2007-04-28  7:36                   ` Dmitry A. Kazakov
2007-04-27 11:43         ` Markus E Leypold
2007-04-28 17:35           ` Dmitry A. Kazakov
2007-04-28 23:06             ` Georg Bauhaus
2007-04-29  8:19               ` Dmitry A. Kazakov
2007-04-29 15:10                 ` (see below)
2007-04-29 17:48                   ` Dmitry A. Kazakov
2007-04-29 22:36                     ` (see below)
2007-04-30  6:58                       ` Dmitry A. Kazakov
2007-04-30  9:59                         ` Markus E Leypold
2007-04-30 10:01                         ` Markus E Leypold
2007-04-30 10:36                         ` Georg Bauhaus
2007-04-30 10:40                           ` Georg Bauhaus
2007-04-30 12:14                           ` Dmitry A. Kazakov
2007-04-30 14:57                         ` (see below)
2007-04-30 10:30                 ` Georg Bauhaus
2007-04-30 12:16                   ` Dmitry A. Kazakov
2007-04-30 14:48                     ` Georg Bauhaus
2007-04-30 16:29                       ` Dmitry A. Kazakov
2007-04-30 17:24                         ` Georg Bauhaus
2007-04-30 18:54                           ` Dmitry A. Kazakov
2007-04-30 19:29                         ` Simon Wright
2007-04-30 20:04                           ` Dmitry A. Kazakov
2007-05-01  0:11                             ` Markus E Leypold
2007-05-01  9:02                             ` Georg Bauhaus
2007-05-01 10:19                               ` Dmitry A. Kazakov
2007-05-01 13:42                                 ` Georg Bauhaus
2007-05-01 17:16                                   ` Dmitry A. Kazakov
2007-05-01 19:14                                     ` Randy Brukardt
2007-05-01 20:14                                       ` Dmitry A. Kazakov
2007-05-02  7:52                                         ` Markus E Leypold
2007-05-02  8:06                                       ` Markus E Leypold
2007-05-03  0:37                                         ` Randy Brukardt [this message]
2007-05-03  8:36                                           ` Markus E Leypold
2007-05-03 23:16                                             ` Randy Brukardt
2007-05-04  0:15                                               ` Markus E Leypold
2007-05-01 21:41                                     ` Georg Bauhaus
2007-05-02  6:57                                       ` Ray Blaak
2007-05-02  8:22                                         ` Markus E Leypold
2007-05-02  8:07                                       ` Markus E Leypold
2007-05-02 10:29                                       ` Dmitry A. Kazakov
2007-05-02 11:48                                         ` Georg Bauhaus
2007-05-02 11:50                                           ` Georg Bauhaus
2007-05-02 13:12                                           ` Dmitry A. Kazakov
2007-05-02 14:21                                             ` Markus E Leypold
2007-05-03 18:27                                             ` Georg Bauhaus
2007-05-03 19:07                                               ` Dmitry A. Kazakov
2007-05-03 19:49                                                 ` Markus E Leypold
2007-04-29 16:26             ` Markus E Leypold
2007-04-26 21:50   ` Simon Wright
2007-04-27  4:45   ` Jeffrey R. Carter
2007-04-27  7:45     ` Martin Krischik
2007-04-27 22:54       ` Georg Bauhaus
2007-04-30 20:13         ` Matthew Heaney
2007-04-26 20:48 ` andrew.carroll
  -- strict thread matches above, loose matches on Subject: below --
2003-12-02 23:15 Mr. J.
2003-12-03  9:31 ` Dmitry A. Kazakov
2003-12-02 23:13 generic package Ratson Janiv
2003-12-03 17:39 ` Stephen Leake
replies disabled

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