comp.lang.ada
 help / color / mirror / Atom feed
From: Martin Dowie <martin@re.mo.ve.thedowies.com>
Subject: Re: Ada2012 : Expression functions and extended return statements
Date: Fri, 06 Jan 2012 08:45:22 -0600
Date: 2012-01-06T08:45:22-06:00	[thread overview]
Message-ID: <1650969959347553100.869853martin-re.mo.ve.thedowies.com@news.btinternet.com> (raw)
In-Reply-To: ycaiu0alika0.1antlb0rkzl1g.dlg@40tude.net

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote:
> On Fri, 6 Jan 2012 03:37:27 -0800 (PST), Martin wrote:
> 
>> On Jan 6, 11:23 am, "Peter C. Chapin" <PCha...@vtc.vsc.edu> wrote:
>>> On 2012-01-06 05:02, Martin wrote:
>>> 
>>>> I still think it would be nice to have a short-hand e.g. 'return
>>>> Result :<>  do'. If anything it would then draw the eye to the more
>>>> interesting case when the 2 are different.
>>> 
>>> You need to repeat the type for ordinary returns as well.
>>> 
>>> function F return Integer is
>>>    Result : Integer;  -- Duplication of return type here.
>>> begin
>>>    Result := 1;
>>>    return Result;
>>> end F;
>>> 
>>> To be consistent it seems like you'd need to be able to use '<>'
>>> throughout the body of the function.
>>> 
>>> function F return Integer is
>>>    Result : <>;  -- Shorthand for function's return type.
>>> begin
>>>    Result := 1;
>>>    return Result;
>>> end F;
>>> 
>>> Considering Ada's tendency to require one to repeat information in
>>> earlier declarations, this seems a bit unAda-like to me. Also this would
>>> allow '<>' to show up in a lot of strange looking places such as type
>>> conversions and type qualifications.
>>> 
>> The difference is that the declaration of 'Return' in the extended
>> return is that the compiler 'knows' that this is the declaration of
>> something that's going to be returned - it can't know that in the
>> ordinary return case.
> 
> This is not a declaration, because the result is not an object.

2012 RM 3.1 6/3 says it is a declaration (but I should have written
'Result' not 'Return').


> 
> Note that your argument applies to other parameters of a subprogram:
> 
>    procedure Foo (X : Integer);  -- Declares X
> 
>    procedure Foo (X : Integer) is -- Reiterates what is already known
>       ...
>    end Foo;

Yes but here you may not have a procedure declaration and even if you did,
they need not be close or even in the same. The chances of a extended
return statement not being close to the 'return ... Is' seems remote.

>> It would certainly be a departure from current Ada - adding a little
>> bit of "Type Inferencing" to the language. But I'm not adverse to
>> that...so long as the inferencing is safe. I like SML/NJ :-)
> 
> Maybe. There are lots of cases where repetition is boring and error prone.
> E.g.:
> 
>    if X in T'Class then
>       declare
>          XX : T'Class renames T'Class (X);
> 
> or
> 
>    if X /= null then
>       declare
>          XX : T renames X.all;
> 
> or
> 
>    X : Subarray renames Array_Thing;  -- Legal, but broken
> 
> As for return, the second best (the first one is to ditch return statement
> altogether) would be:
> 
>    X : return -- Loop label syntax
>       ...
>    end X;
> 
> BTW, Ada could have the result explicitly named like other parameters are.
> E.g.
> 
>    function F return X : Integer := 1 is
>    begin
>       if Something then
>         X := 2;
>       end if;
>    end F; -- No explicit return needed, obviously

A bit like Pascal(?), didn't use the function's name at the point of
return?...so for function 'Foo' you wrote something like,

Foo := 100;

?

The evolution of Ada has always resulted in adding things that aren't
"Ada-like" when compared to the previous revision. There was a paper around
at one time with a proposal to add implicit generic instantiation to the
language...

-- Martin



-- 
-- Sent from my iPad



  reply	other threads:[~2012-01-06 14:45 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-06  8:45 Ada2012 : Expression functions and extended return statements Martin
2012-01-06  9:45 ` stefan-lucks
2012-01-06 10:02   ` Martin
2012-01-06 11:23     ` Peter C. Chapin
2012-01-06 11:37       ` Martin
2012-01-06 13:13         ` Dmitry A. Kazakov
2012-01-06 14:45           ` Martin Dowie [this message]
2012-01-06 15:07             ` Martin
2012-01-06 16:40             ` Robert A Duff
2012-01-06 17:04               ` Martin Dowie
2012-01-19  7:47               ` David Thompson
2012-01-06 17:20             ` Dmitry A. Kazakov
2012-01-07  1:47               ` Randy Brukardt
2012-01-07  9:21                 ` Dmitry A. Kazakov
2012-01-06 16:45           ` Adam Beneschan
2012-01-06 16:36     ` Adam Beneschan
2012-01-07 14:54     ` stefan-lucks
2012-01-07 15:11       ` Dmitry A. Kazakov
2012-01-08  9:41         ` stefan-lucks
2012-01-09  6:16         ` Randy Brukardt
2012-01-06 15:11   ` J-P. Rosen
2012-01-06 15:26     ` Martin
2012-01-07  1:50       ` Randy Brukardt
2012-01-07 10:12         ` Martin
2012-01-07 12:22           ` Simon Wright
2012-01-07 17:10             ` Martin
2012-01-09  6:21           ` Randy Brukardt
2012-01-09  7:57             ` Martin Dowie
2012-01-31 23:34             ` Yannick Duchêne (Hibou57)
2012-01-06 16:33 ` Adam Beneschan
2012-01-06 16:38   ` Adam Beneschan
2012-01-06 22:12     ` Robert A Duff
2012-01-31 23:20 ` Yannick Duchêne (Hibou57)
replies disabled

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