* obsolete vs. removed from the library
@ 1987-03-14 16:03 amn
0 siblings, 0 replies; 3+ messages in thread
From: amn @ 1987-03-14 16:03 UTC (permalink / raw)
According to LRM 10.1:6 a subprogram body is treated as a secondary
unit if the program library already contains a library unit (= a sub-
program declaration) that is a subprogram with the same name.
This means that to recompile a library subprogram the declaration
or context clauses of which have been changed one has to compile
a genuine subprogram specification without the corresponding body
as a separate compilation unit.
LRM 10.3:5 states that obsolete compilation units must be recompiled
unless they are no longer needed. I think this means you cannot
recompile a subprogram body if its specification is obsolete, as
the recompilation needs the specification.
I am not sure whether there is any need for having obsolete
compilation units in the library. I think that 10.3:5 means that
obsolete compilation units cannot be utilized. The only reason
to have obsolete compilation units in a program library could be
that the compilation library tools can decide which compilation
units need to be recompiled after an 'obsoleting' compilation.
Ari Mujunen
Helsinki University of Technology
(mcvax!penet!hut!amn, I suppose)
^ permalink raw reply [flat|nested] 3+ messages in thread
* obsolete vs. removed from the library
@ 1987-03-08 7:02 Bryan
1987-03-11 22:29 ` John B. Goodenough
0 siblings, 1 reply; 3+ messages in thread
From: Bryan @ 1987-03-08 7:02 UTC (permalink / raw)
Dear Ada Fans (if you're not a fan of Ada, I don't care that you read this),
I'm confused again... is there a difference between "obsolete" compilation
units and units "removed" ("deleted" for you VMS fans) from the library?
Consider:
package P is end P;
with P;
procedure Q is begin null; end;
package P is end P;
with P;
procedure Q is begin null; end;
The second compilation of P makes Q obsolete. It also makes the implicit
specification of Q (which is in the library) obsolete. Does this mean
that the second compilation of the body of Q is invalid since it is
a secondary unit of an obsolete spec?
This is related to a question I sent out a while ago, but never received
any replies to. Are there only two library states associated with a unit,
1. not in the library; never successfully compiled.
2. in the library; ready to elaborate
??
Or are there three library states assocaited with a unit?
1 - 2 as above
3. obsolete; not ready to elaborate, but was successfully
compiled once
doug
-------
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: obsolete vs. removed from the library
1987-03-08 7:02 Bryan
@ 1987-03-11 22:29 ` John B. Goodenough
0 siblings, 0 replies; 3+ messages in thread
From: John B. Goodenough @ 1987-03-11 22:29 UTC (permalink / raw)
Doug Bryan asked a question using the following example:
package P is end P;
with P;
procedure Q is begin null; end;
package P is end P;
with P;
procedure Q is begin null; end;
He asserted that "the second compilation of P ... makes the implicit
specification of Q (which is in the library) obsolete." He then went on to
ask "Does this mean that the second compilation of the body of Q is invalid
since it is a secondary unit of an obsolete spec?"
The problem with this question is that it's based on an invalid assumption,
namely, that there is an implicit specification for procedure Q that is the
library unit. I can well understand why Doug may have this interpretation,
since it was my understanding of the RM at one time also, but when the
Language Maintenance Panel/Committee considered this issue (in AI-00199), it
concluded that there is no implicit specification for procedure Q that serves
as a library unit; instead, procedure Q's body is itself the library unit.
Specifically, AI-00199 says:
A subprogram body given in a compilation unit (following the
context clause) is interpreted as a secondary unit if the
program library already contains a subprogram declaration or
generic subprogram declaration with the same identifier; it is
otherwise interpreted as a library unit.
Now the consequences of this approved interpretation are that when P is
recompiled, library unit Q is made obsolete, so the second compilation of
procedure Q must be accepted; it is not a secondary unit of an obsolete
(implicit) specification.
"Obsolete" and "not in the library" are semantically equivalent, although a
given implementation may treat these states differently. (In particular, an
implementation might "recompile" very quickly units that are obsolete, but
physically "in the library".)
-------
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~1987-03-14 16:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1987-03-14 16:03 obsolete vs. removed from the library amn
-- strict thread matches above, loose matches on Subject: below --
1987-03-08 7:02 Bryan
1987-03-11 22:29 ` John B. Goodenough
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox