[comp.lang.ada] INFO-ADA Digest V88 - tasking again

MFELDMAN@GWUVM.BITNET (Mike Feldman) (02/22/88)

In response to Susan Flynn regarding my delay test: I think you are
correct that I've got an erroneous program here. I suppose it would've
been better to time-stamp all the messages from the 2 tasks and write
them to 2 separate files. The intention was to find an easy and obvious
way to show that in the runtime systems I tested, the high-priority
task was not waking up on time (or at all). I agree that writing the
shared variable (the screen or whatever) should've incorporated
synchronization, but of course that very synchronization would've
probably defeated the example. Your discussion of I/O issues (again)
was very instructive.

The end purpose of the example (and the rest of the discussion) has
served the purposes for which I, at least, intended it:

1. to highlight the fact that many people experienced in Ada
   including, apparently, some compiler vendors, are disagreeing with
   each other in good faith (or just plain baffled) about what is
   meant by the LRM in this critically important area;

2. to highlight the apparent weaknesses in the ACVC in testing this area
   which is apparently so "make-or-break" to some real-time people. I've

I used the word "illegal" instead of "non-conforming"; perhaps I'm being
too loose with my terminology but the idea is the same: in this area
particularly, we all have especially weak signals from the ACVC and the
validation process about just what we should expect from the tasking part
of an Ada runtime system.

I have heard it said (glibly to be sure) that "all Ada tasking programs are
erroneous" - but I believe the confusion here makes it imperative that
attention be sharply focused on this area so that we have a clear and
unambiguous statement regarding what the runtime system is expected to
do, so that we can write programs that we are certain are not erroneous.

One rule of thumb I agree with is that Ada tasks should _always_ do some
explicit synchronization now and then. A brief delay might do, if nothing
else - but if _all_ tasks don't do it, there's _still_ no guarantee,
priorities notwithstanding, that a sleeping task will ever wake up.
I will continue to make this assertion until the ACVC tests the intent
of the LRM and all implementations are known to conform!

Call it illegal, non-conforming, or whatever buzzword you like - there
is still confusion on the issue, and I think my tests prove it.