Re: Renaming versus initialisation
- From: "Dmitry A. Kazakov" <mailbox@xxxxxxxxxxxxxxxxx>
- Date: Wed, 28 Sep 2005 18:37:53 +0200
On Wed, 28 Sep 2005 15:12:23 GMT, Tapio Kelloniemi wrote:
> "Dmitry A. Kazakov" <mailbox@xxxxxxxxxxxxxxxxx> wrote:
>>On 27 Sep 2005 20:00:56 -0400, Robert A Duff wrote:
>>
>>> Tapio Kelloniemi <invalid@xxxxxxxxxxxxxxxxxxxxxxxxx> writes:
>>>
>>>> V1 : T := F;
>>>> V2 : T renames F;
>>>>
>>>> I'd like to see an explanation of the effect of an object renaming
>>>> declaration versus variable declaration and initialisation, when the object
>>>> being renamed is a return value of a function. Many thanks for it.
>>>
>>> They are pretty similar.
>>
>>What about difference in respect to creation of new objects?
>
> Renaming creates a new object as does initialisation,
No, it creates a view.
> when not
> returning by reference (return value is copied = new object is created).
Try this with GNAT:
with Ada.Finalization;
package Foo is
type T is new Ada.Finalization.Controlled with null record;
procedure Finalize (X : in out T);
function Create return T;
end Foo;
------------------------------------
with Ada.Text_IO;
package body Foo is
procedure Finalize (X : in out T) is
begin
Ada.Text_IO.Put_Line ("Finalize");
end Finalize;
function Create return T is
begin
return (Ada.Finalization.Controlled with null record);
end Create;
end Foo;
---------------------------------
with Foo; use Foo;
with Ada.Text_IO;
procedure Baz is
begin
Ada.Text_IO.Put_Line ("Initialization:");
declare
X : T := Create;
begin
null;
end;
Ada.Text_IO.Put_Line ("Renaming:");
declare
X : T renames Create;
begin
null;
end;
end Baz;
The output should look like:
Initialization:
Finalize -- X value created before ":="
Finalize -- A local object in Foo
Finalize -- X value assigned by ":="
Renaming:
Finalize -- A local object in Foo
Finalize -- X value renamed
A compiler has right to optimize out the local object. I believe, it also
can optimize out initialization/finalization pair of the target in
declaration with initialization, so in the end it could be same, though it
isn't in GNAT.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
.
- Follow-Ups:
- Re: Renaming versus initialisation
- From: Jeffrey R. Carter
- Re: Renaming versus initialisation
- References:
- Re: Renaming versus initialisation
- From: Dmitry A. Kazakov
- Re: Renaming versus initialisation
- From: Tapio Kelloniemi
- Re: Renaming versus initialisation
- Prev by Date: Re: GNAT GPL - Anonymous Access Type
- Next by Date: Re: Code completion in ada IDE's
- Previous by thread: Re: Renaming versus initialisation
- Next by thread: Re: Renaming versus initialisation
- Index(es):
Relevant Pages
|