comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: discriminant questions
Date: Thu, 22 Sep 2011 10:07:02 +0200
Date: 2011-09-22T10:07:02+02:00	[thread overview]
Message-ID: <1malv6h6q31j3.uz9ws5j0glnm.dlg@40tude.net> (raw)
In-Reply-To: b32585e7-7a90-4d98-a729-d9d9c089252d@g30g2000yqc.googlegroups.com

On Wed, 21 Sep 2011 13:51:43 -0700 (PDT), Maciej Sobczak wrote:

> On Sep 21, 9:48�am, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
> 
>>> Nobody is forcing referential semantics, although it might be the most
>>> natural and efficient solution for iterators.
>>
>> Of course it does, because the iterator refers to the container and to an
>> element in that container.
> 
> Not necessarily.
> 
> Think about a map. Let's say a map with strings as keys.
> We can say that strings are associated with values in the map and that
> strings allow to obtain those values. But can we say that strings
> refer to those elements?

Strings alone do not. In a combination with a reference to the map, that
new object does.

> So let's define the iterator as an entity that is associated with the
> element in a container and that allows to obtain that element.

String is not an iterator according to this definition. It is also not an
index (with operations Succ, Pred, or that I in A and J in A => I+J/2 in
A).

For generic programming the properties of the index, key, iterator must be
stated.

> So - no referential semantics is needed to define iterators.

The validity of an iterator does not depend (pretends to) on other objects
(unconditional). The validity of an index is conditional to the object the
index is being applied.

This is the semantic difference between them from which the usage and other
issues like types relationships follow.

>> Which is evidently fragile as any reference when
>> the container and its element mutate.
> 
> That is, the validity of an iterator is tied to the mutability of the
> container. It is fragile in the same way as array indices, since they
> become invalid when the array is reorganized.

An index is neither valid nor invalid without a context. When index and
container are combined into an iterator bound to certain element of the
container (whereas the element's identity definition is a separate issue,
let's for a while consider that there is a way to identify the element),
then that reference might become invalid.

The point is, when you use index as an iterator you get all problems of the
latter.

Indices are *assumed* to change when the container mutates.

>> It is also bad for generic
>> programming, because the semantics of the side-effects depends on the
>> implementation, i.e. the internal structure of the container.
> 
> Not convincing - generics are supposed to have well defined specs.

I meant rather generic programming = programming in terms of sets of types.

> If
> you worry about your side effects being bound to implementation, then
> there is something wrong with your model of generics. Don't blame
> iterators for this.

I blame them because these differences, essential to container usage,
cannot be promoted at the interface level. 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.

Note that referential semantics has its place. My concern is its overuse
for things which don't require it, or even cannot provide it, e.g. arrays.

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



  reply	other threads:[~2011-09-22  8:06 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 [this message]
2011-09-22 20:57                                       ` Maciej Sobczak
2011-09-23  7:59                                         ` Dmitry A. Kazakov
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