comp.lang.ada
 help / color / mirror / Atom feed
From: Victor Porton <porton@narod.ru>
Subject: Re: Allocators design flaw
Date: Sat, 14 Oct 2017 20:24:44 +0300
Date: 2017-10-14T20:24:44+03:00	[thread overview]
Message-ID: <orth8r$51a$1@gioia.aioe.org> (raw)
In-Reply-To: ortgkv$40i$1@gioia.aioe.org

Dmitry A. Kazakov wrote:

> On 2017-10-14 18:34, Victor Porton wrote:
>> Dmitry A. Kazakov wrote:
>> 
>>> On 2017-10-14 17:17, Victor Porton wrote:
>>>> Dmitry A. Kazakov wrote:
>>>>
>>>>> On 2017-10-14 16:24, Victor Porton wrote:
>>>>>
>>>>>> I mean, it is because we cannot change C standard for better
>>>>>> compatibility with Ada. But we can change Ada 202x for better
>>>>>> compatibility with C libraries.
>>>>>
>>>>> There is nothing incompatible in what you described.
>>>>>
>>>>> There are many C libraries (most?) which cannot deal with objects
>>>>> allocated outside, e.g. in an Ada pool. There was never a big problem
>>>>> to communicate with such libraries.
>>>>
>>>> I want to create an Ada pool which does the same (de)allocation as a C
>>>> library.
>>>>
>>>> The problem is that creating such a pool is (seemingly) impossible with
>>>> current Ada RM.
>>>
>>> It is possible as I explained. You allocate additional information in
>>> front of the object and shift address. Upon deallocation you use that
>>> information to shift the address back before passing it to C's free. The
>>> same technique is used when handling Ada's array address issue in Simple
>>> Components.
>> 
>> Again:
>> 
>> You propose to allocate some additional data before value of a C struct
>> T.
>> 
>> But then I cannot pass the allocated pointer to C functions, instead I
>> pass the pointer + some shift value.
> 
> No. Address is passed to Ada.

The address is passed to Ada, but I also need to pass the pointer to C.

> There is no reason to pass any Ada pointers to any C functions except
> than in the form of "user data".

Convention=>C accesses to records ARE passed to C functions.

Sometimes we even don't know what is inside the records passed to C by a 
pointer.

Then we can use:

type Dummy_Record is null record with Convention=>C;

It is quite legit to pass (Convention=>C) pointers to Dummy_Record, and I do 
this a lot.

So your "There is no reason to pass any Ada pointers to any C functions" is 
wrong.

>> But C side may call a *_free() function on the passed pointer. If the
>> pointer after shifting is different than before shifting, then *_free()
>> would do a very wrong thing!
> 
> No it cannot. You cannot deallocate any Ada objects from C because they
> require finalization.

Convention=>C objects do not require finalization.

> A custom Ada storage pool backed by whatever C memory management library
> is perfectly possible even of C cannot handle alignment. As I explained
> Addresses are shifted forth and back between malloc-Allocate and
> Deallocate-free pairs.

See my other message. You do not understand me.

> Any other method of interaction is simply illegal because of
> finalization issues. If an object must be freed by C, it must a C
> object. If that is necessary, then for each C object an Ada object is
> created. See GtkAda for an example how such situations are handled.

-- 
Victor Porton - http://portonvictor.org

  reply	other threads:[~2017-10-14 17:24 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-14  2:53 Allocators design flaw Victor Porton
2017-10-14  7:27 ` Dmitry A. Kazakov
2017-10-14 13:52   ` Victor Porton
2017-10-14 14:25     ` Dmitry A. Kazakov
2017-10-14 14:03   ` Victor Porton
2017-10-14 14:26     ` Dmitry A. Kazakov
2017-10-14 15:18       ` Victor Porton
2017-10-14 15:44         ` Dmitry A. Kazakov
2017-10-14 16:42           ` Victor Porton
2017-10-14 16:13     ` Simon Wright
2017-10-14 16:38       ` Victor Porton
2017-10-14 14:12   ` Victor Porton
2017-10-14 14:20     ` Victor Porton
2017-10-14 14:24       ` Victor Porton
2017-10-14 14:36         ` Dmitry A. Kazakov
2017-10-14 15:17           ` Victor Porton
2017-10-14 15:51             ` Dmitry A. Kazakov
2017-10-14 16:34               ` Victor Porton
2017-10-14 17:14                 ` Dmitry A. Kazakov
2017-10-14 17:24                   ` Victor Porton [this message]
2017-10-14 18:08                     ` Dmitry A. Kazakov
2017-10-14 14:28     ` Dmitry A. Kazakov
2017-10-14 15:14       ` Victor Porton
2017-10-14 15:42         ` Simon Wright
2017-10-14 16:29           ` Victor Porton
2017-10-14 20:07             ` Simon Wright
2017-10-14 21:26               ` Victor Porton
2017-10-21  1:42     ` Randy Brukardt
2017-10-14  8:02 ` Simon Wright
2017-10-14 13:59   ` Victor Porton
2017-10-14 14:35     ` Simon Wright
2017-10-14 15:11       ` Victor Porton
2017-10-14 15:56         ` Simon Wright
2017-10-14 16:22           ` Victor Porton
2017-10-29 16:01           ` David Thompson
2017-10-14 14:11 ` Victor Porton
replies disabled

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