comp.lang.ada
 help / color / mirror / Atom feed
From: Darren New <dnew@san.rr.com>
Subject: Re: How to avoid unreferenced objects (mutexes etc)
Date: Wed, 16 Jan 2002 00:57:12 GMT
Date: 2002-01-16T00:57:12+00:00	[thread overview]
Message-ID: <3C44CFBD.BC1ED52F@san.rr.com> (raw)
In-Reply-To: u48ujffufrl77b@corp.supernews.com

Matthew Heaney wrote:
> 
> "Darren New" <dnew@san.rr.com> wrote in message
> news:3C445F34.44697AEF@san.rr.com...
> > Matthew Heaney wrote:
> > > Now  you're free to derive types from T, and bind derived type instances
> to
> > > a task.  Using this idiom obviates the need for extensible task types.
> >
> > Not really, because there are various operations that may only be
> > applied to entries, and various operations that may only appear in task
> > bodies and hence your T and its derived types cannot affect it.
> 
> But won't this work:
> 
> package P is
>    type T is abstract tagged limited private;
>    procedure Op (O : in out T) is abstract;
> private
>    task type T_Task_Type (O : access T) is
>       entry E;
>    end T_Task_Type;
> 
>    type T is abstract tagged limited record
>       T_Task : T_Task_Type (T'Access);
>    end record;
> 
> end P;
> 
> Now each instance of T gets its own thread.  Types in T'Class have
> visibility to the task object (assuming they are declared in children of P).

Sure. Now Op can't act as an entry.

The basic problem is that if I have something that says 
  x.boop
and boop is an entry, it can only call one specific piece of code. That
one specific piece of code has to be the one that determines whether the
code blocks.


> > As an example, if your task is coded without any guards on the entries,
> > there's no way for a child of T to add a guard.
> 
> But couldn't a derived type NT extend T to include a protected object (that
> implements a semaphore, say), that could be used by types in NT'Class to do
> the same thing?

That's not guarding an entry. If T.op dispatches, then it can't be an
entry. If it's an entry, I can't override it.

I can't do
  select T.op or delay 10.0 ; yadda end select;
and have T.op be one of two different pieces of code, for example.

The problem I had was trying to build a library wherein the framework
instantiates a number of tasks. Each task is provided by the user of the
framework. (Think, for example, of someone writing multiple types of
windows in a GUI framework.) Each task would need to respond to
different events at different times (meaning selective accepts in the
tasks) and the framework wanted to not have to know what all these
different task types are (meaning dispatching). Couldn't figure out how
to do it properly. Wound up building a kludge that basically involved
manually marshalling all the messages and queueing them, and generally
reimplementing the entry queue mechanism in Ada.

> I haven't found a need for extensible tasks.

I have, but then that's the kind of software I write.

-- 
Darren New 
San Diego, CA, USA (PST). Cryptokeys on demand.
  The opposite of always is sometimes.
   The opposite of never is sometimes.



  reply	other threads:[~2002-01-16  0:57 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-01-11 13:48 How to avoid unreferenced objects (mutexes etc) Dmitry A. Kazakov
2002-01-11 13:52 ` Lutz Donnerhacke
2002-01-11 14:47 ` Robert A Duff
2002-01-11 18:02 ` Jeffrey Carter
2002-01-11 19:40 ` Robert Dewar
2002-01-12 10:18   ` Martin Dowie
2002-01-14  8:54   ` Dmitry A. Kazakov
2002-01-12  1:11 ` Nick Roberts
2002-01-12 22:04   ` Matthew Heaney
2002-01-13  5:45     ` Nick Roberts
2002-01-13  8:21       ` tmoran
2002-01-13 16:12         ` Nick Roberts
2002-01-13 15:08       ` Simon Wright
2002-01-15 17:53         ` Nick Roberts
2002-01-13 16:51       ` Jeffrey Carter
2002-01-14 23:32       ` Matthew Heaney
2002-01-15  8:53         ` Dmitry A. Kazakov
2002-01-14  8:31     ` Jean-Pierre Rosen
2002-01-14  9:42   ` Dmitry A. Kazakov
2002-01-15 15:41     ` Matthew Heaney
2002-01-15 16:18       ` Hyman Rosen
2002-01-15 16:57       ` Darren New
2002-01-15 18:57         ` Matthew Heaney
2002-01-16  0:57           ` Darren New [this message]
2002-01-16 16:35             ` Stephen Leake
2002-01-16 18:07               ` Darren New
2002-01-16 23:18                 ` Matthew Heaney
2002-01-16 23:04             ` Matthew Heaney
2002-01-17  0:21               ` Darren New
2002-01-16 15:18       ` Dmitry A. Kazakov
2002-01-15 18:59     ` Nick Roberts
2002-01-16 15:05       ` Dmitry A. Kazakov
2002-01-16 18:30         ` Matthew Heaney
2002-01-17  8:58           ` Dmitry A. Kazakov
2002-01-17  9:19             ` Lutz Donnerhacke
2002-01-17 10:42               ` Dmitry A. Kazakov
2002-01-17 10:55                 ` Lutz Donnerhacke
2002-01-17 15:30                   ` Dmitry A. Kazakov
2002-01-17 16:29                     ` Lutz Donnerhacke
2002-01-16 20:28         ` Robert A Duff
2002-01-17 19:05         ` Nick Roberts
replies disabled

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