comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: discriminant questions
Date: Fri, 23 Sep 2011 09:59:33 +0200
Date: 2011-09-23T09:59:33+02:00	[thread overview]
Message-ID: <fsmyepvncyb2$.2ik4vw3vu74h.dlg@40tude.net> (raw)
In-Reply-To: f584ceac-d250-4752-96ff-6b5aa9edc473@l4g2000vbz.googlegroups.com

On Thu, 22 Sep 2011 13:57:51 -0700 (PDT), Maciej Sobczak wrote:

> On Sep 22, 10:07�am, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
> 
>> Consider a generic
>> implementation of removing all elements of the container using iterators:
>>
>> � �This := Container.First;
>> � �while This /= Null_Iterator loop
>> � � � �Next := This.Next;
>> � � � �This.Delete;
>> � � � �This := Next;
>> � �end loop;
>>
>> This may work or not depending on the semantics of Delete. E.g. for a
>> circular list, it will loop forever.
> 
> Not convincing, for several reasons:
> 
> 1. Null_Iterator as a sentinel value is not necessary, you might use
> Container.Is_Empty instead.

Is_Empty is a container-wide operation. X = Null_Iterator is an iterator
operation, same is X.Is_In. Aren't you a proponent of iterator approach?

> 2. Even with the above structure, This := This.Delete_And_Move_To_Next
> would do the trick. It would also work for vectors.

What about This.Delete? Should it be removed from the interface?

The problem here is the semantics of existing iterators upon container
manipulation, not computability of the algorithm. Iterators as pointers
have issues that operations on other pointers influence pointers apparently
not involved in the operation, while the implied contract of an iterator is
that it points its element no matter what.

Can I declare an iterator object constant? What is the meaning of its
"constantness" when the container gets manipulated? See a huge language
problem here? An iterator can be immutable only if the container is. How do
I express such stuff in the language?

> 3. You don't have to include circular lists in the same set of types
> as other linear containers in the first place, so there would be no
> temptation to use the generic algorithm with inappropriate container.
> That is, a circular list probably deserves a different interface
> anyway.

Circular lists are the most important ones among doubly-linked lists, and
are especially interesting for iterator-based approaches, because insertion
and removal in such lists can be done without knowing the list's head.

> 4. Are you sure that the circularity is a property of the container?

And being doubly linked is? That is the whole point, list of whatever
structure is not yet a container.

> Or rather of the traversal? Do you know that I can write a circular
> iterator as a wrapper for a "normal" one, for any linear container?
> Will you insist on having a completely separate container type for
> backwards/randomized/etc. iteration as well?

Now you are closer to understanding my point that list is not a container
and the interface of container is not necessarily its implementation.

> So you are blaming iterators for having badly designed generic
> container interface in the first place. Not convincing.

There are more comfortable and safe interfaces than iterators, I want them
available first. I want the language supporting implementation of such
interfaces rather than mounting kludges on kludges like accessors, limited
returns etc.

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



  reply	other threads:[~2011-09-23  7:59 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-17 16:30 discriminant questions ytomino
2011-09-17 17:19 ` Dmitry A. Kazakov
2011-09-17 17:46   ` ytomino
2011-09-17 19:41     ` Dmitry A. Kazakov
2011-09-17 22:55       ` ytomino
2011-09-18  8:50         ` Dmitry A. Kazakov
2011-09-18 10:54           ` ytomino
2011-09-18 11:35             ` Dmitry A. Kazakov
2011-09-18 12:41               ` ytomino
2011-09-18 13:17                 ` Dmitry A. Kazakov
2011-09-18 16:22                   ` ytomino
2011-09-18 16:32                   ` ytomino
2011-09-18 18:15                     ` Dmitry A. Kazakov
2011-09-18 23:44                       ` ytomino
2011-09-19  7:27                         ` Dmitry A. Kazakov
2011-09-18 14:43               ` Dmitry A. Kazakov
2011-09-18 16:46               ` Robert A Duff
2011-09-18 18:01                 ` Dmitry A. Kazakov
2011-09-18 19:20                   ` Maciej Sobczak
2011-09-19  7:39                     ` Dmitry A. Kazakov
2011-09-19 20:00                       ` Maciej Sobczak
2011-09-20  7:33                         ` Dmitry A. Kazakov
2011-09-20 15:45                           ` Maciej Sobczak
2011-09-20 16:48                             ` Dmitry A. Kazakov
2011-09-20 20:19                               ` Maciej Sobczak
2011-09-21  7:48                                 ` Dmitry A. Kazakov
2011-09-21 20:51                                   ` Maciej Sobczak
2011-09-22  8:07                                     ` Dmitry A. Kazakov
2011-09-22 20:57                                       ` Maciej Sobczak
2011-09-23  7:59                                         ` Dmitry A. Kazakov [this message]
2011-09-23 10:57                                           ` Georg Bauhaus
2011-09-23 22:30                                           ` Randy Brukardt
2011-09-23 22:50                                           ` Randy Brukardt
2011-09-24  6:46                                             ` Dmitry A. Kazakov
2011-09-26 22:48                                               ` Randy Brukardt
2011-09-27  8:10                                                 ` Dmitry A. Kazakov
2011-09-27 10:18                                                   ` Georg Bauhaus
2011-09-27 12:14                                                     ` Dmitry A. Kazakov
2011-09-27 15:11                                                       ` Georg Bauhaus
2011-09-27 15:38                                                         ` Dmitry A. Kazakov
2011-09-27 18:06                                                           ` Georg Bauhaus
2011-09-27 19:06                                                             ` Dmitry A. Kazakov
2011-09-29  0:01                                                               ` Georg Bauhaus
2011-09-29  8:26                                                                 ` Dmitry A. Kazakov
2011-09-30  1:24                                                                   ` Randy Brukardt
2011-09-30  8:10                                                                     ` Dmitry A. Kazakov
2011-09-30 10:07                                                                   ` Georg Bauhaus
2011-09-30 12:38                                                                     ` Dmitry A. Kazakov
2011-09-30 17:40                                                                       ` Georg Bauhaus
2011-09-30 18:55                                                                         ` Dmitry A. Kazakov
2011-09-23  9:23                                       ` Stephen Leake
2011-09-23  9:48                                         ` Dmitry A. Kazakov
2011-09-23 22:42                                           ` Randy Brukardt
2011-09-24  6:56                                             ` Dmitry A. Kazakov
2011-09-26 22:43                                               ` Randy Brukardt
2011-09-24 10:47                                             ` Stephen Leake
2011-09-24 12:54                                       ` Simon Wright
2011-09-24 14:46                                         ` Dmitry A. Kazakov
2011-09-24 16:21                                           ` Simon Wright
2011-09-24 16:43                                             ` Dmitry A. Kazakov
2011-09-22  2:52                                   ` Randy Brukardt
2011-09-22  8:11                                     ` Dmitry A. Kazakov
2011-09-20  0:01           ` Randy Brukardt
2011-09-20  7:38             ` Dmitry A. Kazakov
2011-09-20 11:11               ` AdaMagica
2011-09-20 12:09                 ` Dmitry A. Kazakov
2011-09-20 12:31                   ` AdaMagica
2011-09-20 12:57                     ` Dmitry A. Kazakov
2011-09-20 23:28                       ` ytomino
2011-09-21  5:03                         ` AdaMagica
2011-09-21  8:08                         ` Dmitry A. Kazakov
2011-09-21 10:03                           ` Georg Bauhaus
2011-09-21 10:29                             ` Dmitry A. Kazakov
2011-09-22  3:21                           ` Randy Brukardt
2011-09-22  3:05                   ` Randy Brukardt
2011-09-19 23:35         ` Randy Brukardt
2011-09-20 21:39           ` ytomino
2011-09-22  3:32             ` Randy Brukardt
2011-09-18 16:32 ` ytomino
2011-09-19 14:46   ` ytomino
2011-09-19 15:14     ` Dmitry A. Kazakov
2011-09-19 17:49       ` ytomino
2011-09-20  7:29         ` Georg Bauhaus
2011-09-20 19:50           ` ytomino
2011-09-20  8:08         ` Dmitry A. Kazakov
2011-09-20 18:47           ` ytomino
2011-09-21  8:16             ` Dmitry A. Kazakov
2011-09-21  9:55               ` ytomino
2011-09-22  3:26                 ` 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