comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org>
Subject: Re: Question about finalization of local object returned from the function
Date: Mon, 2 Sep 2019 19:14:24 +0200
Date: 2019-09-02T19:14:24+02:00	[thread overview]
Message-ID: <qkjilg$dm9$1@dont-email.me> (raw)
In-Reply-To: <642d37c8-28f4-4a4f-8446-56a09d893e7c@googlegroups.com>

On 9/2/19 12:12 AM, darkestkhan wrote:
> On Sunday, September 1, 2019 at 6:34:07 PM UTC, Stephen Leake wrote:
>> On Wednesday, August 28, 2019 at 6:45:16 PM UTC-7, Brad Moore wrote:
>>> On Wednesday, August 28, 2019 at 4:36:38 PM UTC-6, darkestkhan wrote:
>>>> Given a function returning controlled type:
>>>>
>>>> function Bar return T is
>>>>    Foo : T;
>>>> begin
>>>>    ...
>>>>    return Foo;
>>>> end Bar;
>>>>
>>>> would Foo be finalized upon end of the function?
>>>>
>>>
>>> Yes Foo is finalized upon end of the function, but not before copying the
>>> object to a temporary result object which is returned to the caller. The temporary is finalized also after being assigned to the result object.
>>> In other words, the expected result is returned to the caller, and the Foo object on the stack is also properly finalized.
>>>
>>
>> However, the compiler is free to optimize away any of these steps, as long as the net effect is preserved.
>>
>> To expand on Brad's comment about the extended return statement, consider:
>>
>> function Bar return T is
>> begin
>>     return Foo : T do
>>        ...
>>     end return;
>> end Bar;
>>
>> then 'Foo' is actually the object that the client has declared/allocated. For example:
>>
>> declare
>>     A : T := Bar;
>> begin
>> ...
>>
>> "Foo" is actually "A", so no temporary objects are required.
>>
>> I don't think Limited_Controlled is required for this to happen; ARM 6.5 (24/3) mentions "built in place", but not Limited_Controlled. Also ARM 7.6 (17.1/3) gives the conditions where "built in place" is required.
>>
>> -- Stephe
> 
> That is correct - "built in place" semantics has more uses than just
> for limited types, although it does make working with limited types
> far simpler.

Maybe I'm misreading this, but it sounds to me as if those posting after Moore 
are saying that the language requires build in place when an extended return 
statement is used. It doesn't. The language only requires that "immutably 
limited" types and aggregates of controlled types be built in place. Note that 
aggregates of non-limited controlled types are returned without using extended 
return, but still require build in place.

Other types may be returned through assignment, as Moore described, even if an 
extended return is used. A compiler is free to do build in place for other 
types, but not required to.

-- 
Jeff Carter
"The competent programmer is fully aware
of the limited size of his own skull."
Edsger Dijkstra
159

      reply	other threads:[~2019-09-02 17:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-28 22:36 Question about finalization of local object returned from the function darkestkhan
2019-08-29  1:45 ` Brad Moore
2019-09-01 18:34   ` Stephen Leake
2019-09-01 22:12     ` darkestkhan
2019-09-02 17:14       ` Jeffrey R. Carter [this message]
replies disabled

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