comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Problems with 'class, help anyone?
Date: Tue, 12 Nov 2002 13:20:00 +0100
Date: 2002-11-12T13:20:00+01:00	[thread overview]
Message-ID: <aqqrm7$chi61$1@ID-77047.news.dfncis.de> (raw)
In-Reply-To: mailman.1037026681.5800.comp.lang.ada@ada.eu.org

Alexandre E. Kopilovitch wrote:

>>> There is another way, with perhaps even less incompatibility: let's
>>> introduce third mode for a formal parameter - "return" mode (in addition
>>> to conventional "in" and "out"). That "return" may be applied to the
>>> procedure's first parameter only, and it means the same as "out" mode,
>>> with single exception: if the first parameter of a procedure is in
>>> "return" mode then the procedure *may* be called without the
>>> corresponding (first) argument, and in such a case it returns value. For
>>> example:
>>> 
>>> procedure Two_Fold(Result : return Boolean; Something : in Integer);
>>> 
>>> X : Boolean;
>>> Two_Fold(X, 0);  -- "return" as "out", procedure does not return value
>>> 
>>> if Two_Fold(0) then  -- first argument omitted, procedure returns value
>>>   ...
>>> end if;
>>
>>But an out parameter and a return value are not the same, i.e. they cannot
>>generally be interchanged!
>>
>>Consider e.g.
>>     function F return String;
>>vs.
>>     procedure P (S: out String);
>>The former has no idea how long the object is that will get the result (if
>>any), the latter takes the length from the parameter.
> 
> Well, I was not writing an AI (perhaps, I should?), therefore I did not
> look at the details. Surely, you are right - there must be a limitation
> for a parameter in "return" mode: if one is of indefinite type then the
> currently undefined attributes (Length, First, etc.) cannot be used for
> that parameter.

If the goal of your proposal is to expose the result as a variable within 
the body, then some equilibristic is indeed required. For instance, you 
could require that such a parameter has to be overridden within the body:

procedure Read (Item : result String) is
   Length : Natural;
begin
   Get (Length); -- Get the actual string length
   declare
      Text : String (1..Length) renames Item; -- Override
   begin
      Get (Text);
   end;
end Read;

Honestly, I do not like it. Further, if you go this way, then you should 
consequently say, OK, let's allow multiple-return functions capable to 
return more than one potentially unlimited result. Maybe then it will worth 
the efforts.

-- 
Regards,
Dmitry A. Kazakov
www.dmitry-kazakov.de



  reply	other threads:[~2002-11-12 12:20 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-11-11 15:12 Problems with 'class, help anyone? Alexandre E. Kopilovitch
2002-11-12 12:20 ` Dmitry A. Kazakov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2002-11-11  9:03 Grein, Christoph
2002-11-09  0:11 Alexandre E. Kopilovitch
2002-10-29  4:48 
2002-10-29  6:08 ` Jim Rogers
2002-10-29 19:10   ` 
2002-10-30  5:27   ` 
2002-10-30  7:49     ` Simon Wright
2002-10-30  8:13     ` Jim Rogers
2002-11-02  4:02       ` 
2002-11-05  2:40       ` 
2002-11-05  4:56         ` Jim Rogers
2002-11-05 17:25           ` Stephen Leake
2002-11-05 22:29             ` Robert A Duff
2002-11-06  8:54               ` Pascal Obry
2002-11-06 15:00                 ` Georg Bauhaus
2002-11-06 17:18                   ` Stephen Leake
2002-11-07 14:14                     ` Georg Bauhaus
2002-11-06 15:19                 ` Ted Dennison
2002-11-06 17:22                   ` Stephen Leake
2002-11-07 10:32                     ` Preben Randhol
2002-11-07 15:53                       ` Stephen Leake
2002-11-06 13:48               ` John English
2002-11-07 15:07                 ` Robert A Duff
2002-11-08  9:48                   ` Dmitry A. Kazakov
2002-11-08 13:44                     ` Robert A Duff
2002-11-08 14:27                       ` Jean-Pierre Rosen
2002-11-09 18:40                       ` Dmitry A. Kazakov
2002-11-11  9:51                         ` Lutz Donnerhacke
2002-11-11 13:24                           ` Dmitry A. Kazakov
2002-11-11 13:55                             ` Lutz Donnerhacke
2002-11-09 19:02                       ` Robert A Duff
2002-11-10 17:13                         ` Dmitry A. Kazakov
replies disabled

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