comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: asynchronous task communication
Date: Tue, 8 Jan 2013 21:29:15 +0100
Date: 2013-01-08T21:29:15+01:00	[thread overview]
Message-ID: <142z4tyl4xqrq.1cr8vdvx44cvx.dlg@40tude.net> (raw)
In-Reply-To: lyzk0jv8qj.fsf@pushface.org

On Tue, 08 Jan 2013 18:18:44 +0000, Simon Wright wrote:

> Jeffrey Carter <spam.jrcarter.not@spam.not.acm.org> writes:
> 
>> On 01/08/2013 05:02 AM, Brian Drummond wrote:
> 
>>> So, holding onto a cursor would be unsafe (i.e. no longer refer to the
>>> original object) after an "insert" operation, possibly earlier in the
>>> vector?
>>
>> If you have an item in your (unbounded) array, indexed by Positive, at
>> index 3, it will still be at index 3 if you assign to components at
>> other indices, or extend the array by adding new components beyond the
>> current end of the array. However, if you insert a new component
>> before the existing item at index 3, then all the components after the
>> new component will shift up, and the existing item will then be at
>> index 4.
>>
>> This should be pretty obvious if you think about how you would
>> implement an unbounded array.
>>
>> One would think that a Cursor would behave similarly.
> 
> Not so! The Cursor becomes ambiguous[1], and using it is a bounded
> error. GNAT GPL 2012 implements Cursor using an Index, & behaves the way
> you'd expect.
> 
> [1] http://www.ada-auth.org/standards/12rm/html/RM-A-18-2.html#p240

Yep, cursor is a bad abstraction, with the semantics sometimes ill-defined. 
Pointers fall into same category.

On the contrary, index is a good abstraction for all ordered containers 
like arrays are. The semantics of index is well defined for all operations 
on the container.

For a graph or a tree, vector is an inappropriate interface because edges 
are usually enumerated in a different manner than vector does. So, if 
vectors should be used then rather privately. And if nodes of the graph 
need to be referenced then cursors or indices should again be used only 
privately.

Usually graphs require some reference counting schema when nodes are 
accessed with read and read-write accesses differentiated when graph should 
be updated. Furthermore read-write access may require cloning of nodes on 
demand preserving consistency of other views etc. It is not a simple issue, 
highly dependant on the problem space.

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



  reply	other threads:[~2013-01-08 20:29 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-31  0:16 asynchronous task communication Charles Hixson
2012-12-31  9:04 ` Simon Wright
2012-12-31 11:49   ` Simon Wright
2012-12-31 10:50 ` J-P. Rosen
2012-12-31 12:09 ` Georg Bauhaus
2012-12-31 18:52   ` Charles Hixson
2012-12-31 20:18     ` Shark8
2012-12-31 21:09     ` Niklas Holsti
2012-12-31 22:15       ` Randy Brukardt
2013-01-01  3:58         ` Charles Hixson
2013-01-01  4:48           ` tmoran
2013-01-01 17:59             ` Charles Hixson
2013-01-01  3:51       ` Charles Hixson
2013-01-01  9:59         ` Dmitry A. Kazakov
2013-01-01 10:38         ` Brian Drummond
2013-01-01 12:32         ` Jeffrey Carter
2013-01-01 18:21           ` Charles Hixson
2013-01-01 18:54             ` Robert A Duff
2013-01-02  7:36               ` Charles Hixson
2013-01-02  9:55                 ` Dmitry A. Kazakov
2013-01-02 19:02                   ` Charles Hixson
2013-01-02 20:35                     ` Dmitry A. Kazakov
2013-01-03  0:20                       ` Charles Hixson
2013-01-03  6:34                         ` Charles Hixson
2013-01-03  8:50                         ` Dmitry A. Kazakov
2013-01-03 19:01                           ` Charles Hixson
2013-01-03 10:01                         ` J-P. Rosen
2013-01-03 19:29                           ` Charles Hixson
2013-01-04  8:17                             ` J-P. Rosen
2013-01-05  4:31                               ` Charles Hixson
2013-01-09  8:34                                 ` Stephen Leake
2013-01-03 22:27                         ` Randy Brukardt
2013-01-05  5:18                           ` Charles Hixson
2013-01-05  8:48                             ` Niklas Holsti
2013-01-06 22:55                               ` Charles Hixson
2013-01-07  0:38                                 ` tmoran
2013-01-07  6:07                                 ` Shark8
2013-01-07 10:49                                 ` Brian Drummond
2013-01-07 18:27                                   ` Jeffrey Carter
2013-01-08 12:02                                     ` Brian Drummond
2013-01-08 17:12                                       ` Jeffrey Carter
2013-01-08 18:18                                         ` Simon Wright
2013-01-08 20:29                                           ` Dmitry A. Kazakov [this message]
2013-01-08 21:01                                           ` Jeffrey Carter
2013-01-08 21:14                                             ` Simon Wright
2013-01-08 22:11                                               ` Randy Brukardt
2013-01-08 22:52                                               ` Jeffrey Carter
2013-01-08 22:26                                         ` Brian Drummond
2013-01-08  2:41                             ` Randy Brukardt
2013-01-02 22:43         ` Niklas Holsti
2013-01-03  1:30           ` Charles Hixson
2013-01-03 12:11             ` Georg Bauhaus
2013-01-03 13:17               ` Dmitry A. Kazakov
2013-01-05 20:19               ` Charles Hixson
2013-01-07  4:01                 ` Shark8
2013-01-01 19:59     ` J-P. Rosen
replies disabled

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