comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Ada package registry?
Date: Thu, 11 Feb 2016 16:00:58 -0600
Date: 2016-02-11T16:00:58-06:00	[thread overview]
Message-ID: <n9j0ar$rhi$1@loke.gir.dk> (raw)
In-Reply-To: n9hgje$vai$1@gioia.aioe.org

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:n9hgje$vai$1@gioia.aioe.org...
> On 11/02/2016 02:37, Randy Brukardt wrote:
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:n9c9a8$mt9$1@gioia.aioe.org...
>>> On 09/02/2016 00:02, Randy Brukardt wrote:
>>>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>>>> news:n94cbv$19ed$1@gioia.aioe.org...
>>>
>>>>> For persistence layer you need dereference primitive operations. One 
>>>>> for
>>>>> read access in order to cache data and one write access to mark the
>>>>> cache
>>>>> dirty.
>>>>
>>>> The first is the function call (to Reference, if you're looking at the
>>>> Ada
>>>> containers), and the second is the Finalize call that happens when the
>>>> object returned from Reference goes away. That was the whole point of 
>>>> the
>>>> design. (Of course, you could have written that in Ada 95, but without
>>>> the
>>>> syntactic sugar that makes it easier to read and write.)
>>>
>>> It is not same. A reference points to a proxy object, a cached copy of 
>>> the
>>> external object in the persistent storage. When the proxy object is
>>> updated via any reference, it must be marked dirty. So that when the
>>> object at some point gets finalized or the transaction is committed it
>>> would be written back to the storage.
>>
>> But actually they are the same, because the reference can only exist for 
>> a
>> very short time. (You can't assign a reference because the accessibility 
>> is
>> too shallow.) Thus, the proxy object can be marked dirty (if you created 
>> a
>> writable reference, which is only created when you actually use the
>> reference in a writable context) and written back to the persistent 
>> storage.
>
> Writing objects is very expensive. So objects must be reference counted 
> anyway. I don't see how the schema can handle all this, as well as 
> inducing the reference type (read-only vs. read-write) from the context.

The language rules determine the reference type from context, so that's done 
automatically for you. (And, yes, there are ACATS tests for it, so a 
conforming Ada compiler will do it correctly -- now. [The tests failed on 
compilers when they came out, but those problems were swiftly fixed.]) See 
the difference between Reference and Constant_Reference in the 
Ada.Containers library.

You don't necessarily have to reference count objects, especially if you use 
a read-write lock (as discussed below); in that case, there can never be 
more than one writable reference active at a time anyway. But you surely can 
do that.

>> You do have to make sure that only one task is potentially writing a 
>> proxy
>> object at a time, but that seems like a good thing.
>
> Not good. Object updating through a reference and handling reference 
> counts must be atomic. References must act as read-write locks.

That's what I meant: the implementation of Reference can include an 
appropriate read-write lock. I wouldn't leave it to the programmer to get 
right.

Everything you've asked about is present in the Ada 2012 features (or 
before), so I think it's possible to write such a library and have it work 
reasonably transparently. Not having tried it myself, I don't want to make a 
100% certainty claim, but surely we intended that it would work.

                       Randy.


  reply	other threads:[~2016-02-11 22:00 UTC|newest]

Thread overview: 132+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-29  1:13 Ada package registry? olivier.henley
2016-01-29  3:43 ` gautier_niouzes
2016-01-29 22:06   ` Randy Brukardt
2016-01-30 17:21     ` Dirk Heinrichs
2016-01-29 14:20 ` David Botton
2016-01-29 22:27 ` Randy Brukardt
2016-01-30  7:35   ` Dmitry A. Kazakov
2016-01-30 22:14     ` Tero Koskinen
2016-01-31  7:51       ` Dmitry A. Kazakov
2016-01-31 15:52         ` Mart van de Wege
2016-01-31 16:21           ` Dmitry A. Kazakov
2016-01-31 19:16             ` olivier.henley
2016-02-01 23:22       ` Randy Brukardt
2016-02-05 19:52         ` Tero Koskinen
2016-02-05 20:42           ` Dmitry A. Kazakov
2016-02-06  1:25           ` Randy Brukardt
2016-02-06  6:09             ` Jeffrey R. Carter
2016-02-08 22:54               ` Randy Brukardt
2016-02-06 23:08             ` AdaMagica
2016-02-07  7:08             ` gautier_niouzes
2016-02-07  8:50             ` gautier_niouzes
2016-02-08 22:58               ` Randy Brukardt
2016-02-07 10:24             ` gautier_niouzes
2016-01-31 19:10 ` olivier.henley
2016-02-02  0:44   ` Randy Brukardt
2016-02-02 18:45     ` Shark8
2016-02-02 20:14       ` gautier_niouzes
2016-02-02 20:46         ` Shark8
2016-02-02 21:32           ` gautier_niouzes
2016-02-03  4:21             ` Shark8
2016-02-03  9:39               ` Georg Bauhaus
2016-02-02 22:51       ` Randy Brukardt
2016-02-03  4:16         ` Shark8
2016-02-01  8:30 ` Thomas Løcke
2016-02-01  9:32   ` Georg Bauhaus
2016-02-02  8:54     ` Thomas Løcke
2016-02-02 14:51       ` jsquirek
2016-02-02 18:25         ` Dmitry A. Kazakov
2016-02-02 20:05         ` gautier_niouzes
2016-02-02 20:58         ` Björn Lundin
2016-02-02 23:06       ` Randy Brukardt
2016-02-03  7:15         ` Pascal Obry
2016-02-03 22:11           ` Randy Brukardt
2016-02-04  6:51             ` Pascal Obry
2016-02-04 20:52               ` Randy Brukardt
2016-02-05  7:11                 ` Pascal Obry
2016-02-06  1:11                   ` Randy Brukardt
2016-02-04  9:05             ` Dmitry A. Kazakov
2016-02-04  9:20               ` Mark Carroll
2016-02-04 12:58               ` Nasser M. Abbasi
2016-02-04 21:03               ` Randy Brukardt
2016-02-05  8:31                 ` Dmitry A. Kazakov
2016-02-04 16:52             ` Björn Lundin
2016-02-04 16:59               ` Dmitry A. Kazakov
2016-02-04 17:29                 ` Björn Lundin
2016-02-04 21:21                   ` Randy Brukardt
2016-02-04 22:04                     ` Björn Lundin
2016-02-05  8:51                       ` Dmitry A. Kazakov
2016-02-05 22:06                         ` Björn Lundin
2016-02-06  0:30                       ` Randy Brukardt
2016-02-06 23:26                         ` Björn Lundin
2016-02-07  0:16                           ` Jeffrey R. Carter
2016-02-07  8:02                             ` Dmitry A. Kazakov
2016-02-07  8:36                               ` gautier_niouzes
2016-02-07  8:52                                 ` Dmitry A. Kazakov
2016-02-07 10:06                                   ` gautier_niouzes
2016-02-07 10:23                                     ` Dmitry A. Kazakov
2016-02-07 20:02                                       ` Björn Lundin
2016-02-08  8:19                                         ` Dmitry A. Kazakov
2016-02-07 10:00                               ` Georg Bauhaus
2016-02-07 10:18                                 ` Dmitry A. Kazakov
2016-02-07 19:27                                   ` Georg Bauhaus
2016-02-07 19:47                                     ` Georg Bauhaus
2016-02-07 19:54                                     ` Dmitry A. Kazakov
2016-02-07 22:56                                       ` Georg Bauhaus
2016-02-08  8:22                                         ` Dmitry A. Kazakov
2016-02-07 20:11                                 ` Björn Lundin
2016-02-07 22:11                                   ` Georg Bauhaus
2016-02-08  8:16                                     ` Björn Lundin
2016-02-07 19:57                               ` Björn Lundin
2016-02-08  8:25                                 ` Dmitry A. Kazakov
2016-02-08 22:42                               ` Randy Brukardt
2016-02-07 20:07                             ` Björn Lundin
2016-02-08  8:38                               ` Dmitry A. Kazakov
2016-02-08 18:24                                 ` Björn Lundin
2016-02-08 22:38                           ` Randy Brukardt
2016-02-09 20:56                             ` Björn Lundin
2016-02-05 12:54                     ` G.B.
2016-02-05 13:27                       ` Dmitry A. Kazakov
2016-02-05 15:53                         ` G.B.
2016-02-05 16:45                           ` Dmitry A. Kazakov
2016-02-05 17:58                             ` G.B.
2016-02-05 18:47                               ` Dmitry A. Kazakov
2016-02-07  9:40                                 ` Georg Bauhaus
2016-02-07 10:13                                   ` Dmitry A. Kazakov
2016-02-07 19:21                                     ` Georg Bauhaus
2016-02-07 19:57                                       ` Dmitry A. Kazakov
2016-02-07 22:16                                         ` Georg Bauhaus
2016-02-08  8:20                                           ` Björn Lundin
2016-02-08  9:03                                           ` Dmitry A. Kazakov
2016-02-08 10:08                                             ` G.B.
2016-02-08 13:42                                               ` Dmitry A. Kazakov
2016-02-06  0:49                       ` Randy Brukardt
2016-02-07  8:42                         ` Georg Bauhaus
2016-02-04 21:09               ` Randy Brukardt
2016-02-05  8:59                 ` Dmitry A. Kazakov
2016-02-06  0:04                   ` Randy Brukardt
2016-02-06  8:54                     ` Dmitry A. Kazakov
2016-02-08 23:02                       ` Randy Brukardt
2016-02-09  8:50                         ` Dmitry A. Kazakov
2016-02-11  1:37                           ` Randy Brukardt
2016-02-11  8:25                             ` Dmitry A. Kazakov
2016-02-11 22:00                               ` Randy Brukardt [this message]
2016-02-06 18:48 ` olivier.henley
2016-02-09  0:05   ` Randy Brukardt
2016-02-09  3:50     ` Shark8
2016-02-11  1:40       ` Randy Brukardt
2016-02-09  8:04     ` Thomas Løcke
2016-02-09 13:33       ` Alejandro R. Mosteo
2016-02-09 14:58         ` Shark8
2016-02-11  1:46         ` Randy Brukardt
2016-02-11  5:19           ` Shark8
2016-02-09 18:08       ` Jeffrey R. Carter
2016-02-09 21:00         ` Shark8
2016-02-09 21:07     ` Björn Lundin
2016-02-09 21:31       ` Shark8
2016-02-09 23:47         ` Jeffrey R. Carter
2016-02-10  5:10         ` J-P. Rosen
2016-02-11  1:51       ` Randy Brukardt
2016-02-12 16:05 ` Alejandro R. Mosteo
2016-02-13  5:42   ` olivier.henley
2016-02-13 12:20     ` Alejandro R. Mosteo
replies disabled

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