comp.lang.ada
 help / color / mirror / Atom feed
From: dmitry@elros.cbb-automation.de (Dmitry A. Kazakov)
Subject: Re: How to avoid unreferenced objects (mutexes etc)
Date: Wed, 16 Jan 2002 15:05:35 GMT
Date: 2002-01-16T15:05:35+00:00	[thread overview]
Message-ID: <3c45865f.2709203@News.CIS.DFN.DE> (raw)
In-Reply-To: a21u43$u3f33$2@ID-25716.news.dfncis.de

On Tue, 15 Jan 2002 18:59:16 -0000, "Nick Roberts"
<nickroberts@adaos.worldonline.co.uk> wrote:

>"Dmitry A. Kazakov" <dmitry@elros.cbb-automation.de> wrote in message
>news:3c429d1c.2624281@News.CIS.DFN.DE...
>
>> ...
>> Maybe I should describe the problem. There is a communication channel
>> implemented as a tagged type. The base type provides low-level I/O
>> operations. It has read and write tasks serving as monitors. The
>> problem is with the derived types [potentially an arbitrary number of
>> them]. They extend the base type and  provide layered high-level
>> operations.
>
>I'm not too keen on this approach, because this way the higher levels do not
>'hide away' the lower-level interface. Normally, it would be better for a
>distinctly higher-level interface to be based on a different type (not a
>derived one).

Well, you can derive from the base in the private part and expose
operations you want to keep visible using wrappers implemented via
renaming in the body.

However, I always wished Ada having an ability to disallow primitive
operations. Like:

type Unordered is new Integer;
function ">" (Left, Right : Unordered) is abstract; -- Disallow ">"

>> Some of them must lock the channel [either read or write
>> one]. A "natural" solution would be to extend monitors, but alas tasks
>> are not tagged.
>
>But the tagged type could contain a component of a task type.

Yes, and another problem as well. Finalize is called *after* all task
components has been terminated. So when the object is being destroyed
you cannot notify tasks about that. You must use pointers to tasks if
you need a "prepare-to-die" notification.

>> An untagged solution requires an increasing number of
>> wrapping subroutines [thus run-time penalty].
>
>I really don't understand why there should be a greater time penalty for
>this solution. I think possibly this is a misunderstanding that lies at the
>heart of your problems.

Maybe the penalty is not very high, but writting dozens of wrappers is
disgusting.

>> A genericity-based
>> solution produces a combinatoric explosion of packages used as the
>> parameters for other packages etc. They must be instantiated at the
>> library level. In other words it is a mess.
>
>I don't really see generics being directly relevant to the problem here.

You can make package implementing some interface layer generic with a
lower level package as the formal parameter.

>> So I chose the lesser evil = mutexes with all that nasy problems of
>> error recovery, you have pointed. I really do not like it.
>
>Please find below an outline skeleton of what a simple communications
>hierarchy might look like in Ada. It is merely a guess at what you need, and
>it even then is merely a suggestion of how to do it.

[ driver example snipped ]

The difference is that with a driver you always know the interface:
Open/Read/Write/Close. The protocols we must implement are more
complex. Additionally one should have an ability to replace any part
of the hierarchy. For instance, low level: transport [like sockets vs.
RS323], middle level: time synchronization protocol, high level client
vs. server. Of course this ideal is reachless, so I am considering a
which "local optimum" to take. (:-))

Regards,
Dmitry Kazakov



  reply	other threads:[~2002-01-16 15:05 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
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 [this message]
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