From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Erroneous execution? (was Re: gnat: time-slicing)
Date: Tue, 13 Aug 2002 22:30:52 GMT
Date: 2002-08-13T22:30:52+00:00 [thread overview]
Message-ID: <wccwuqubdcz.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: H077Bu.J1D@world.std.com
"Ben Brosgol" <brosgol@world.std.com> writes:
> > You're trying to language-lawyer me to death, Ben. ;-)
>
> Not quite that extreme, but at least to the point of moderate pain and
> suffering :-)
;-)
> > I *think* it's erroneous, and I'm sure it was *intended* to be erroneous
> > by the language designers.
>
> I'm not so sure that it was intended to be erroneous. If each task were
> invoking Put_Line(Some_File, ...) on the same explicitly-passed file
> parameter, then yes I agree that the execution would be erroneous. But
> where the shared variable is hidden (i.e., not passed as a parameter), I
> believe that the implementation needs to provide the protection (for
> subprograms from predefined packages).
It seems to me that Put_Line(X) ought to have *exactly* the same
semantics as Put_Line(Current_Output, X). So if one is erroneous (when
executed simultaneously by two different tasks) then so should the
other.
I must admit that the RM wording is not crystal clear on this point.
Besides, if it's not erroneous, I see no particular reason why the
required locking would be at the character level. Why not at the level
of individual calls like Put_Line? Why can two simultaneous Put_Lines
intersperse the characters, but not the bits? Why shouldn't they be
required to intersperse lines?
> As an example of this principle, suppose that the implementor of
> Ada.Numerics.Elementary_Functions decided to keep a hash table of (arg,
> sin(arg)) pairs in the package body; i.e., sin(arg) does a hash table lookup
> and possible insertion. There's no way that the user would know this, so if
> the implementation did not protect the shared hash table from simultaneous
> access, calling sin(x) from concurrent tasks could result in erroneous
> execution. So A(3) kicks in and requires the protection to be supplied. I
> think the same principle applies to the Put(Char), although in this case it
> may be a bit more obvious that there's a shared variable lurking in the
> shadows.
The sin(x) example seems different. Surely two simultaneous calls to
sin should be OK, since sin is a mathematical function. If it has
internal (implementation-level) side-effects, then the implementation
should hide them. But Put_Line is different -- it is *supposed* to have
a side effect, namely, it is supposed to write upon the Current_Output
file. (In fact, it seems silly to call that a "side effect"; it's
really just the "effect" (no "side" about it).)
> Well of course the AARM has no formal status :-)
True (and I see the smiley). But the AARM indicates (often more clearly
than the RM) what the language designers intended. Language lawyers who
ignore the AARM do so at their peril.
>...Also, the wording in 3.a
> is ambiguous, since it might be referring to the Put procedure that has a
> File_Type as an explicit parameter, in which case I agree that the
> simultaneous calls are erroneous.
>
> > which indicates the intent pretty clearly.
>
> Or maybe not so clearly :-)
OK, I admit it's not clear.
> > P.S. *You* wrote much of Annex A!
>
> True, which is why I raised this issue in the first place :-) although if
> you do not have a similar recollection then maybe what I am remembering (the
> non-erroneousness of simultaneous calls on Put(Char)) is an intermediate
> decision that was later changed? In any event I will not claim the credit /
> blame for the wording of A(3); that was from the pen of Chairman Tuck.
Yeah, and I think *I* wrote A(3.a). I could be misremembering that,
though. I think I meant all the Put procedures when I said "Put".
- Bob
next prev parent reply other threads:[~2002-08-13 22:30 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-15 11:25 gnat: time-slicing Jan Prazak
2002-07-15 8:44 ` Dale Stanbrough
2002-07-15 19:10 ` Jan Prazak
2002-07-15 17:16 ` David C. Hoos
2002-07-15 23:30 ` Jan Prazak
2002-07-16 0:54 ` Jan Prazak
2002-07-16 10:46 ` Lutz Donnerhacke
2002-07-16 11:57 ` Aaro Koskinen
2002-07-16 12:57 ` SteveD
2002-07-16 15:18 ` Florian Weimer
2002-07-16 13:29 ` Marin David Condic
2002-07-17 19:29 ` Jan Prazak
2002-07-15 13:07 ` time-slicing David C. Hoos
2002-07-15 14:56 ` time-slicing Ian Broster
2002-07-15 19:10 ` time-slicing Jan Prazak
2002-07-15 19:10 ` time-slicing Jan Prazak
2002-07-15 19:05 ` time-slicing Anders Gidenstam
2002-07-15 23:30 ` time-slicing Jan Prazak
2002-07-15 20:33 ` time-slicing Darren New
2002-07-16 16:30 ` time-slicing Pascal Obry
2002-07-16 23:05 ` time-slicing Jan Prazak
2002-07-16 21:33 ` time-slicing Robert Dewar
2002-07-15 21:03 ` gnat: time-slicing tmoran
2002-07-16 13:04 ` Jan Prazak
2002-07-16 21:29 ` Robert Dewar
2002-07-17 19:29 ` Jan Prazak
2002-07-17 16:44 ` Pascal Obry
2002-07-17 21:38 ` Jan Prazak
2002-07-17 19:21 ` Randy Brukardt
2002-07-17 22:44 ` Jan Prazak
2002-07-17 19:57 ` Marin David Condic
2002-07-18 18:38 ` Larry Kilgallen
2002-07-20 11:52 ` Robert Dewar
2002-07-17 19:43 ` Pascal Obry
2002-07-18 18:55 ` Jan Prazak
2002-07-18 17:01 ` Pascal Obry
2002-07-18 17:03 ` Pascal Obry
2002-07-18 22:38 ` chris.danx
2002-07-18 2:50 ` R. Tim Coslet
2002-07-18 12:54 ` SteveD
2002-07-20 11:56 ` Robert Dewar
2002-07-18 12:02 ` Frank J. Lhota
2002-07-19 2:33 ` Robert A Duff
2002-07-19 13:32 ` Jan Prazak
2002-07-19 23:46 ` Keith Thompson
2002-07-20 0:36 ` Robert A Duff
2002-07-20 4:25 ` Darren New
2002-07-20 11:47 ` Robert Dewar
2002-07-21 10:58 ` Keith Thompson
2002-07-31 22:28 ` Robert A Duff
2002-08-01 19:28 ` Erroneous execution? (was Re: gnat: time-slicing) Ben Brosgol
2002-08-01 22:03 ` Robert A Duff
2002-08-02 3:59 ` Ben Brosgol
2002-08-13 22:30 ` Robert A Duff [this message]
2002-08-02 4:17 ` Robert Dewar
2002-07-19 3:17 ` time-slicing SteveD
2002-07-19 13:32 ` time-slicing Jan Prazak
2002-07-19 12:41 ` time-slicing SteveD
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox