comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Custom Storage Pool questions
Date: Sat, 2 Oct 2021 12:18:19 +0200	[thread overview]
Message-ID: <sj9blb$1srp$1@gioia.aioe.org> (raw)
In-Reply-To: sj97ei$sru$1@franka.jacob-sparre.dk

On 2021-10-02 11:06, Randy Brukardt wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
> news:sj6gmg$1n1n$1@gioia.aioe.org...
>> On 2021-10-01 02:04, Randy Brukardt wrote:
> ...
>>>> Nope, this is exactly how it works with most specialized pools, like
>>>> arenas, stacks, reference counting pools etc.
>>>
>>> These things don't work as pools in Ada.
>>
>> Yes, they normally have Deallocate as a void operation or raise an
>> exception.
> 
> No, they don't, because they don't work with controlled types, tasks, etc.

Of course they do. E.g. with void Deallocation. When an instance of 
Unchecked_Deallocation is called, the object gets properly finalized, 
while the memory stays occupied in the pool until all arena is cleared.

In the case of reference counted objects finalization is done using an 
instance Unchecked_Deallocation. Subpools are totally useless there.

If necessary, I use a fake pool to run Unchecked_Deallocation on it 
without reclaiming any memory from the original pool.

>>> You need to use the subpool
>>> mechanism to make them safe,
>>
>> I do not see how that could change anything without destroying the whole
>> purpose of such pools, namely nearly zero-cost allocation and
>> deallocation.
> 
> It ties any finalization to the subpool, so all of the contained objects get
> finalized when the subpool is freed.

Yes, and there is no need doing that in most practical scenarios. Note 
also that subpool allocations need to be handled in the user code. It is 
highly undesirable and error-prone. So, whatever safety you might get 
from subpool's bookkeeping, you lose it at that point.

> ...
>>> because otherwise the objects go away before
>>> the type (given these sorts of mechanisms generally have some sort of
>>> block
>>> deallocation).
>>
>> If controlled types need to be used, which rarely happens, a bookkeeping
>> is added to finalize them. Instead of IMO useless subpools, one could add
>> some allocation bookkeeping support etc.
> 
> That's again not safe in any sense. You shouldn't need to worry about
> whether some abstraction that you use uses finalization, especially as you
> can't know if someone adds it later.

Why compiler assisted bookkeeping is safe for subpools, but unsafe as a 
stand-alone mechanism?

> ...
>>> Indeed, I now believe that any nested access type is evil and mainly is
>>> useful to cause nasty cases for compilers. I'd ban them in an Ada-like
>>> language (that would also simplify accessibility greatly).
>>
>> See where collections have led you! (:-))
> 
> No, that's mostly because of accessibility. I'd be happy if one banned doing
> any allocations with general access types (mixing global/stack allocated
> objects and allocated objects is pure evil IMHO), but that would be rather
> hard to enforce.

Yes, but there is an alternative option of fixing Unchecked_Deallocation 
through general access types.

> Note that nested tagged types also cause many implementation problems,
> adding a lot of unnecessary overhead.

Sure, but again. there is a paramount use case that requires dynamic 
elaboration of tagged types, i.e. the relocatable libraries. You cannot 
ban them and you cannot forbid tagged extensions declared in a 
relocatable library. So getting rid of nesting tagged types will ease 
nothing.

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

  reply	other threads:[~2021-10-02 10:18 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-13  0:53 Custom Storage Pool questions Jere
2021-09-13  5:29 ` Randy Brukardt
2021-09-14  1:04   ` Jere
2021-09-21  0:06     ` Randy Brukardt
2021-09-18 11:32   ` Simon Wright
2021-09-20  0:31   ` Jere
2021-09-20  6:34     ` Niklas Holsti
2021-09-20  6:48       ` Emmanuel Briot
2021-09-20  7:35         ` Dmitry A. Kazakov
2021-09-20 16:59         ` Shark8
2021-09-21  0:50         ` Randy Brukardt
2021-09-21 23:08           ` Jere
2021-09-28  4:42             ` Randy Brukardt
2021-10-02 23:19               ` Jere
2021-10-03  8:52                 ` Dmitry A. Kazakov
2021-10-14  1:26                   ` Randy Brukardt
2021-09-13 11:12 ` J-P. Rosen
2021-09-14  0:48   ` Jere
2021-09-14  6:08     ` J-P. Rosen
2021-09-15  0:39       ` Jere
2021-09-15  7:01         ` Simon Wright
2021-09-16 23:32           ` Jere
2021-09-20 23:51             ` Randy Brukardt
2021-09-21 22:40               ` Jere
2021-09-14  6:23     ` Dmitry A. Kazakov
2021-09-14  6:42       ` J-P. Rosen
2021-09-14  7:00         ` Dmitry A. Kazakov
2021-09-20 23:58         ` Randy Brukardt
2021-09-15  0:21       ` Jere
2021-09-15  6:54         ` Dmitry A. Kazakov
2021-09-20 23:48       ` Randy Brukardt
2021-09-14 10:54     ` Egil H H
2021-09-15  0:11       ` Jere
2021-09-15 16:43 ` Simon Wright
2021-09-15 17:03   ` Simon Wright
2021-09-15 19:07   ` Dmitry A. Kazakov
2021-09-15 20:40     ` Simon Wright
2021-09-16  7:12       ` Emmanuel Briot
2021-09-16 23:21         ` Jere
2021-09-17  7:08           ` Emmanuel Briot
2021-09-17  7:18           ` Simon Wright
2021-09-17 13:56           ` Dmitry A. Kazakov
2021-09-17 19:46             ` Simon Wright
2021-09-17 20:39               ` Dmitry A. Kazakov
2021-09-17 21:17                 ` Niklas Holsti
2021-09-18  7:49                   ` Dmitry A. Kazakov
2021-09-18  9:03                     ` Niklas Holsti
2021-09-18 10:22                       ` Dmitry A. Kazakov
2021-09-18 15:59                         ` Niklas Holsti
2021-09-18 16:19                           ` Dmitry A. Kazakov
2021-09-19 10:36                             ` Niklas Holsti
2021-09-19 11:41                               ` Dmitry A. Kazakov
2021-09-20  7:05                                 ` Niklas Holsti
2021-09-20  7:35                                   ` Dmitry A. Kazakov
2021-09-20  8:08                                     ` Niklas Holsti
2021-09-20  8:28                                       ` Dmitry A. Kazakov
2021-09-21  0:45                                         ` Randy Brukardt
2021-09-21  0:40                                       ` Randy Brukardt
2021-09-21  0:30                                 ` Randy Brukardt
2021-09-21  0:37                                 ` Randy Brukardt
2021-09-21  6:28                                   ` Dmitry A. Kazakov
2021-09-28  4:38                                     ` Randy Brukardt
2021-09-28  7:00                                       ` Dmitry A. Kazakov
2021-09-21  0:26                         ` Randy Brukardt
2021-09-21  6:51                           ` Dmitry A. Kazakov
2021-09-28  4:31                             ` Randy Brukardt
2021-09-28  6:56                               ` Dmitry A. Kazakov
2021-09-28  7:52                                 ` Simon Wright
2021-09-28  8:07                                   ` Dmitry A. Kazakov
2021-09-28 22:04                                     ` Randy Brukardt
2021-09-29  7:57                                       ` Dmitry A. Kazakov
2021-09-29 14:41                                         ` Shark8
2021-09-29 15:16                                           ` Dmitry A. Kazakov
2021-09-30  0:16                                             ` Randy Brukardt
2021-09-30  8:08                                               ` Dmitry A. Kazakov
2021-10-01  0:04                                                 ` Randy Brukardt
2021-10-01  8:25                                                   ` Dmitry A. Kazakov
2021-10-02  9:06                                                     ` Randy Brukardt
2021-10-02 10:18                                                       ` Dmitry A. Kazakov [this message]
2021-10-03  4:33                                                         ` Randy Brukardt
2021-10-03  8:40                                                           ` Dmitry A. Kazakov
2021-10-14  1:21                                                             ` Randy Brukardt
2021-10-14  3:12                                                               ` philip...@gmail.com
2021-10-14  7:31                                                               ` Dmitry A. Kazakov
2021-10-15  0:36                                                                 ` Randy Brukardt
2021-10-15  8:08                                                                   ` Stephen Leake
2021-10-15  8:18                                                                     ` Dmitry A. Kazakov
2021-10-15 22:22                                                                     ` Randy Brukardt
2021-10-15  8:15                                                                   ` Dmitry A. Kazakov
2021-10-15 22:44                                                                     ` Randy Brukardt
2021-10-16  9:00                                                                       ` Dmitry A. Kazakov
2021-10-16 14:32                                                                         ` Simon Wright
2021-10-16 15:06                                                                           ` Dmitry A. Kazakov
2021-10-18 14:23                                                                             ` Shark8
2021-09-21  0:19                     ` Randy Brukardt
2021-09-21  0:18                 ` Randy Brukardt
2021-09-16  8:41       ` Dmitry A. Kazakov
replies disabled

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