From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Why does `Unchecked_Deallocation` need the access type?
Date: Sun, 26 Jul 2015 14:16:49 +0300
Date: 2015-07-26T14:16:49+03:00 [thread overview]
Message-ID: <d1jtt2F8fpsU1@mid.individual.net> (raw)
In-Reply-To: <5d6faxxdsssv.15g7kj5hv86mk$.dlg@40tude.net>
On 15-07-26 11:54 , Dmitry A. Kazakov wrote:
> On Sun, 26 Jul 2015 00:11:22 -0700 (PDT), EGarrulo wrote:
>
>> The `Free` procedure to deallocate an object is declared like this:
>>
>> procedure Free is
>> new Ada.Unchecked_Deallocation(Object_Type, Object_Access_Type);
>>
>> Yet the access parameter seems redundant. Why is it necessary to specify it?
>
> Because the instance of the generic procedure Free has the argument of the
> access type:
>
> procedure Free (Pointer : in out Object_Access_Type);
[snip]
> What is indeed redundant here is the Object_Type. It is necessary because
> Ada does not have access type introspection. That is, you cannot get the
> object type from an access type, though the compiler knows it anyway.
> Surely there should have been an attribute to get that type, e.g.
>
> Pointer_Type'Target
>
> But there is none.
Another reason, perhaps a trivial one, for including Object_Type is that
the only syntax to define a formal access type in a generic declaration
uses an access_type_definition, which requires a name for the object
type. The declaration of Unchecked_Deallocation (RM 12.5.4) has this form:
generic
type Object(<>) is limited private;
type Name is access Object;
procedure Ada.Unchecked_Deallocation(X : in out Name)
...
Ada could perhaps have allowed a formal_access_type_definition with an
unnamed target type, perhaps of the form
type Name is access; -- Not Ada!
or
type Name is access <>; -- Not Ada!
and then the Object formal type could have been omitted from
Unchecked_Deallocation. However, it seems to me that such formal access
types would not be very useful without the 'Target attribute that Dmitry
suggested.
--
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
. @ .
next prev parent reply other threads:[~2015-07-26 11:16 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-26 7:11 Why does `Unchecked_Deallocation` need the access type? EGarrulo
2015-07-26 8:54 ` Dmitry A. Kazakov
2015-07-26 11:16 ` Niklas Holsti [this message]
2015-07-27 22:38 ` Jeremiah
2015-07-27 20:20 ` Randy Brukardt
2015-07-28 7:40 ` Dmitry A. Kazakov
2015-07-28 21:25 ` Randy Brukardt
2015-07-29 6:28 ` Dmitry A. Kazakov
2015-07-29 20:47 ` Randy Brukardt
2015-07-30 6:19 ` 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