comp.lang.ada
 help / color / mirror / Atom feed
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
       .      @       .

  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