comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Will "renames" increase program size?
Date: Sat, 18 Jun 2011 09:54:29 +0200
Date: 2011-06-18T09:54:29+02:00	[thread overview]
Message-ID: <c8ynrt1qxx83.1vaqckntoa8r5$.dlg@40tude.net> (raw)
In-Reply-To: itgpve$c7b$1@munin.nbi.dk

On Fri, 17 Jun 2011 19:02:49 -0500, Randy Brukardt wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
> news:12lr1j2mmzidu.18gjo4p3e73kk$.dlg@40tude.net...
>> On Thu, 16 Jun 2011 18:39:35 -0500, Randy Brukardt wrote:
>>
>>>>Semantically returning result of a function is always copying because the
>>>>object being returned changes the scope.
>>>
>>> "Changing scope" doesn't require a copy in either RM or some sort of outside
>>> logical universe. The only thing that the "scope" of an object controls is
>>> when it is finalized, and that has nothing to do with the contents (from a
>>> logical perspective) of the object.
>>
>> I fail to see how finalization could have nothing to do with the contents.
>> Finalized objects have no contents, they do not even exist.
> 
> Sorry, you need the read the RM again. Finalization is a process that 
> happens on objects that exist, and it has no effect on whether they exist or 
> not. Typically, they cease to exist later (how much later depends on where 
> they are declared).

Semantically finalized [typed] object does not exist. Object /= memory
allocated for it.

> In particular, there is nothing necessarily wrong with accessing a finalized 
> object; this allows objects to have circular dependencies and the like.

That would be a partial finalization. E.g. when the derived type's
finalization has been completed, the base's operations might still be
accessible. At this point the object of the derived type no more exists
[semantically].

>>> The point is that copying has a visible semantic effect,
>>
>> The cases under consideration are ones where copying should have no
>> semantic effect, e.g. parameter passing.
> 
> Last I recall, we were talking about renames, which never copy anything.

Some renames copy, some do not. Consider this example:

   type T is new Ada.Finalization.Controlled ...;
   function Foo return T;

   X : T renames Foo;

Does this copy? It seems that according to you, you cannot tell without
looking into the body of Foo:

   function Foo return T is -- This copies
      Result : T;
   begin
      return T;
   end Foo;

   function Foo return T is -- This does not copy
   begin
      return Result : T;
   end Foo;

Implementation-dependent semantics is not that good idea.

In my view any function always copies no matter what. Even when no Adjust
is called because it happened that the object created for rename shared the
memory with the function result. Even if it was inlined and optimized away
completely, semantically, it is still a copy.

That Ada's designer possibly thought otherwise, constitutes, in my opinion,
a language design bug (e.g. bogus limited-valued functions).

> Don't recall any discussion whatsoever about parameter passing. But if 
> parameter passing does in fact do a copy, then there is a semantic effect 
> (on aliasing at the very least).

No, because an attempt to exploit this effect is an error. Semantics does
not apply to erroneous programs, which is after all, why they are
erroneous.

> It's pretty hard to do anything in a language definition without there being 
> a semantic effect. Even when you think there isn't one, clever people like 
> Adam and Steve Baird will show you one in some convoluted case. (Steve was 
> just bending my ear about 'Unchecked_Access causing overhead when used to 
> return an object of a local tagged type.)

One might need to generate some code in order to ensure *absence* of any
semantic effect.

P.S. It seems that you use the word "semantic" as an equivalent to "code"
(a meaning to the machine). I used it as a meaning to the programmer.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2011-06-18  7:54 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-15  2:10 Will "renames" increase program size? Adrian Hoe
2011-06-15  5:37 ` Randy Brukardt
2011-06-15  9:11   ` AdaMagica
2011-06-15 11:26     ` Yannick Duchêne (Hibou57)
2011-06-15 11:24   ` Yannick Duchêne (Hibou57)
2011-06-15 13:15     ` Dmitry A. Kazakov
2011-06-16  6:59       ` AdaMagica
2011-06-16  8:59         ` Dmitry A. Kazakov
2011-06-16 10:18           ` AdaMagica
2011-06-16 12:15             ` Dmitry A. Kazakov
2011-06-16 23:22             ` Randy Brukardt
2011-06-16 15:40           ` Adam Beneschan
2011-06-16 16:33             ` Dmitry A. Kazakov
2011-06-16 17:42               ` Adam Beneschan
2011-06-16 18:53                 ` Dmitry A. Kazakov
2011-06-16 23:39                   ` Randy Brukardt
2011-06-17  6:53                     ` Dmitry A. Kazakov
2011-06-18  0:02                       ` Randy Brukardt
2011-06-18  7:54                         ` Dmitry A. Kazakov [this message]
2011-06-18  8:58                           ` Yannick Duchêne (Hibou57)
2011-06-18 10:05                             ` Dmitry A. Kazakov
2011-06-18 12:49                               ` Yannick Duchêne (Hibou57)
2011-06-18 22:44                           ` Randy Brukardt
2011-06-22  0:56                             ` Shark8
2011-06-15 22:21 ` anon
replies disabled

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