comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Custom Storage Pool questions
Date: Fri, 1 Oct 2021 10:25:52 +0200	[thread overview]
Message-ID: <sj6gmg$1n1n$1@gioia.aioe.org> (raw)
In-Reply-To: sj5ja5$os1$1@franka.jacob-sparre.dk

On 2021-10-01 02:04, Randy Brukardt wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
> news:sj3r92$pla$3@gioia.aioe.org...
>> On 2021-09-30 02:16, Randy Brukardt wrote:
>>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>>> news:sj2008$1cmo$1@gioia.aioe.org...
>>> ...
>>>> Random = unrelated to the object's life time.
>>>
>>> All objects have to disappear before their type disappears, so the object
>>> *cannot* live longer than the access type for which it is allocated from.
>>
>> The type of the access type /= the type of object. Only access objects
>> must disappear and they do.
> 
> ??

    type T is range 1..2;
    type P is access T;

T /= P

> There is nothing in a pool except unorganized memory. "Objects" only
> exist outside of the pool for some access type.

No the objects exist in the pool and are *accessible* via one or more 
access types, some of them could even be anonymous, BTW.

> There has to be some
> organizing type, else you would never know where/when things are finalized.

Yes, and that is up to the programmer.

>>> It's probably a lousy idea to share pool objects (as opposed to pool
>>> types)
>>> amongst access types.
>>
>> You need these for access discriminants.
> 
> Those (coextensions) are one of Ada's worst ideas; they have tremendous
> overhead without any value. Almost everything has to take them into account.
> Yuck. Access discriminants of existing objects are OK but really don't add
> anything over a component of an access type.

Discriminants add safety when creating objects because the language 
requires initialization of. For components one have to use an aggregate 
which turns extremely difficult in practical cases or even impossible.

>>> If you do have a longer lived pool and a shorter lived access type, you
>>> will
>>> end up with a bunch of zombie objects in the pool that cannot be used in
>>> any
>>> way (as any access is erroneous). All that can happen is a memory leak.
>>> Don't do that.
>>
>> 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.

> 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.

> 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.

> Allocated objects can only be deallocated from
> the same type as they were allocated.

You can perfectly deallocate any object by erasing its pool and you can 
finalize the object before doing that too. Furthermore you can use a 
local access type and instantiate Unchecked_Deallocation with it. There 
are many ways to skin the cat.

The language must do no baseless assumptions about programmer's intentions.

> 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! (:-))

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

  reply	other threads:[~2021-10-01  8:25 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 [this message]
2021-10-02  9:06                                                     ` Randy Brukardt
2021-10-02 10:18                                                       ` Dmitry A. Kazakov
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