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
next prev parent 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