comp.lang.ada
 help / color / mirror / Atom feed
From: Jeff Carter <carter@spam.innocon.com>
Subject: Re: Task Discriminants & Arrays
Date: 1997/05/13
Date: 1997-05-13T00:00:00+00:00	[thread overview]
Message-ID: <33787506.41C67EA6@spam.innocon.com> (raw)
In-Reply-To: mheaney-ya023680001305970024550001@news.ni.net


Matthew Heaney wrote:
> 
> One of the nice things about Ada 95 is that I can pass a task an identifier
> by giving the task a discriminant:
> 
> task type T (Id : Positive) is
>    entry E;
> end T;
> 
> O : T (1);
> 
> And then the task knows its own identifier by refering to Id.
> 
> Now suppose I have a task array:
> 
> type Task_Array is array (Positive range <>) of T; -- ???
> 
> O : Task_Array;  -- ???
> 
> It would be really swell if I could give the task object component of the
> array an identifier that is its index position in the array.  Anyone got
> any ideas about how to do this?
> 
> Is there some other technique for allowing the elaborator to assign an id
> to a task object, without using an initialization entry?
> 
> --------------------------------------------------------------------
> Matthew Heaney
> Software Development Consultant
> <mailto:matthew_heaney@acm.org>
> (818) 985-1271

As I understand it, task discriminants were intended to eliminate the
"serial bottleneck" that results from having to call an initialization
entry to provide information like this to task instances. However, as
far as I can tell, it simply complicates matters: You have to declare an
access type designating the task type, make your array type an array of
these access types, then allocate the tasks at runtime:

task type T (Id : Positive) is
   entry E;
end T;

type T_Ptr is access all T;

type A is array (Some_Range) of T_Ptr;

O : A;
...
for I in O'range loop
   O (I) := new T (Id => I);
end loop;

This doesn't seem to be any more readable that the 83 equivalent:

task type T is
   entry Init (Id : in Positive);
   entry E;
end T;

type A is array (Some_Range) of T;

O : A;
...
for I in O'range loop
   O (I).Init (Id => I);
end loop;

The use of discriminants may be more efficient and have less of a serial
bottleneck. I'd be interested to know if this is the case, and if so,
how much of an improvement one gains with various compilers.
-- 
Jeff Carter  PGP:1024/440FBE21
Auntie-spam reply to; try ( carter @ innocon . com )
"Now go away, or I shall taunt you a second time."
Monty Python & the Holy Grail




  parent reply	other threads:[~1997-05-13  0:00 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-05-13  0:00 Task Discriminants & Arrays Matthew Heaney
1997-05-13  0:00 ` Robert A Duff
1997-05-14  0:00   ` W. Wesley Groleau (Wes)
1997-05-15  0:00     ` Mats Weber
1997-05-15  0:00     ` Robert A Duff
1997-05-15  0:00       ` John G. Volan
1997-05-15  0:00         ` Matthew Heaney
1997-05-15  0:00           ` John G. Volan
1997-05-15  0:00         ` Robert A Duff
1997-05-16  0:00           ` John G. Volan
1997-05-16  0:00             ` John G. Volan
1997-05-13  0:00 ` Jeff Carter [this message]
1997-05-13  0:00   ` John G. Volan
1997-05-14  0:00     ` Jeff Carter
1997-05-13  0:00   ` Matthew Heaney
replies disabled

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