comp.lang.ada
 help / color / mirror / Atom feed
From: Shark8 <onewingedshark@gmail.com>
Subject: Re: A function that cannot be called?
Date: Fri, 19 Oct 2018 13:25:51 -0700 (PDT)
Date: 2018-10-19T13:25:51-07:00	[thread overview]
Message-ID: <1a143584-e575-47b2-ab99-f5b6c3382add@googlegroups.com> (raw)
In-Reply-To: <0a680981-7b14-4b72-b51a-b06ab7822d54@googlegroups.com>

On Friday, October 19, 2018 at 12:19:07 PM UTC-6, marc...@earthlink.net wrote:
> On Thursday, October 18, 2018 at 8:14:32 AM UTC-4, G.B. wrote:
> > There is a type declaration, I rememberd, in Ada, that
> > does not allow any object of the type to be declared.
> > I think the type should be along the lines below. Is
> > this correct?
> > 
> > Then, a function that nominally returns objects of
> > this type should be impossible to call. Is this right,
> > too?
> > 
> > generic
> >      type T(<>) is limited private;  -- gen. arg. type
> > 
> > package What is
> > 
> >      type Void (<>) is private;
> > 
> >      function Impossible (X : T) return Void;
> > 
> > private
> > 
> >      package Inner is
> >          type Void (<>) is private;
> >      private
> >          type Void is  record
> >              null;
> >          end record;
> >      end Inner;
> > 
> >      type Void is new Inner.Void;
> > 
> > end What;
> > 
> > (If current Ada could still pass by reference in both call
> > direction and return direction, then I'd have added *limited*
> > to the Voids' declarations. Without it, a body of Impossible
> > is closer to becoming possible by using Convention => Ada
> > together with an 'Address clause on a Result object. I think.)
> 
> Before Ada 95 or Ada 2005 it would have been a package
> spec that had the following (with P1,P2,etc. being valid types): 
> 
> type Not_Objects_Just_for_Parameters is limited private;
> function Return_A_Corresponding_Value(p1:t1;p2:t2;etc...)
>   return Not_Objects_Just_for_Parameters;
> procedrure Force_Call_Of_Function_1
>           (Function_Call:Not_Objects_Just_for_Parameters;
>            Other_Param3:p3;etc...);
> procedrure Force_Call_Of_Function_2
>           (Function_Call:Not_Objects_Just_for_Parameters;
>            Other_Param4:p4;etc...);
> 
> I miss that way of forcing/ensuring new execution of some
> code as a prerequisite of use of a subprogram. ;-(
> Being able to hang on to the result of such a function
> by using renames wrecks this usage.

Isn't there a similar effect that can be had via

  Type Just_For_Parameters(<>) is limited private;
  Function Get_Param return Just_For_Parameters;
  --...
PRIVATE
  Type Stub_Record is null record;
  Type Just_For_Parameters is not null access Stub_Record
    with Size => 0;
  --...

Or am I misunderstanding what you're getting at? (Quite possible as I've never had occasion to use Size 0 "access"-types.)


  parent reply	other threads:[~2018-10-19 20:25 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-18 12:14 A function that cannot be called? G.B.
2018-10-18 15:33 ` Stefan.Lucks
2018-10-18 20:21   ` G.B.
2018-10-18 20:57     ` Niklas Holsti
2018-10-19  7:15     ` Dmitry A. Kazakov
2018-10-19 13:55       ` G.B.
2018-10-19 15:31         ` Dmitry A. Kazakov
2018-10-18 17:03 ` AdaMagica
2018-10-18 19:36   ` G.B.
2018-10-18 21:30     ` Randy Brukardt
2018-10-19 14:00       ` G.B.
2018-10-19 15:39         ` Dmitry A. Kazakov
2018-10-20  1:34         ` Randy Brukardt
2018-10-20  9:14           ` G.B.
2018-10-20 11:13             ` Simon Wright
2018-10-20 14:11               ` Dmitry A. Kazakov
2018-10-21  9:25                 ` G.B.
2018-10-21  9:07               ` G.B.
2018-10-21  9:51                 ` Dmitry A. Kazakov
2018-10-21 10:57                 ` Niklas Holsti
2018-10-21 18:00                 ` Simon Wright
2018-10-19  8:48 ` AdaMagica
2018-10-19 11:15   ` G.B.
2018-10-19 17:06     ` AdaMagica
2018-10-19 19:57       ` G.B.
2018-10-19 22:06         ` Jere
2018-10-21 10:14           ` G.B.
2018-10-21 11:30             ` Egil H H
2018-10-23 11:45               ` G.B.
2018-10-23 14:35                 ` Jere
2018-10-23 14:57                   ` Dmitry A. Kazakov
2018-10-23 17:49                     ` G.B.
2018-10-23 19:25                       ` Dmitry A. Kazakov
2018-10-24  7:35                         ` G.B.
2018-10-24  8:14                           ` Dmitry A. Kazakov
2018-10-19 18:19 ` marciant
2018-10-19 18:22   ` marciant
2018-10-20  1:36     ` Randy Brukardt
2018-10-20  2:54       ` marciant
2018-10-19 20:25   ` Shark8 [this message]
2018-10-19 23:28     ` marciant
replies disabled

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