E.2 Categorization of Library Units
1
[Library units can be categorized according to the
role they play in a distributed program. Certain restrictions are associated
with each category to ensure that the semantics of a distributed program
remain close to the semantics for a nondistributed program.]
2/3
{
AI05-0243-1}
A
categorization pragma is a library unit pragma (see
10.1.5)
that specifies a corresponding
categorization aspect. A categorization
aspect restricts the declarations, child units, or semantic dependences
of the library unit to which it applies. A
categorized library unit
is a library unit that has a categorization aspect that is True.
3/3
{
AI05-0243-1}
The pragmas Shared_Passive, Remote_Types, and Remote_Call_Interface are
categorization pragmas, and the associated aspects are categorization
aspects. In addition, for the purposes of this Annex, the aspect Pure
(see
10.2.1) is considered a categorization
aspect and the pragma Pure is considered a categorization pragma.
4/3
{
8652/0078}
{
AI95-00048-01}
{
AI05-0243-1}
[
A library package or generic library package is
called a
shared passive library unit if the Shared_Passive aspect
of the unit is True.
A library package or generic
library package is called a
remote types library unit if the Remote_Types
aspect of the unit is True.
A library unit is called
a
remote call interface if the Remote_Call_Interface aspect of
the unit is True.]
A
normal library unit is
one for which no categorization aspect is True.
4.a/3
Proof: {
AI05-0243-1}
These terms (other than “normal library unit”) are really
defined in the following clauses.
4.a.1/1
Ramification: {
8652/0078}
{
AI95-00048-01}
A library subprogram can be a remote call interface, but it cannot be
a remote types or shared passive library unit.
5/3
{
AI05-0206-1}
{
AI05-0243-1}
{
AI05-0269-1}
[The various categories of library units and the associated restrictions
are described in this clause and its subclauses. The categories are related
hierarchically in that the library units of one category can depend semantically
only on library units of that category or an earlier one in the hierarchy,
except that the body of a remote types or remote call interface library
unit is unrestricted, the declaration of a remote types or remote call
interface library unit may depend on preelaborated normal library units
that are mentioned only in private with clauses, and all categories can
depend on limited views.
6/3
{
AI05-0243-1}
{
AI05-0269-1}
The overall hierarchy (including declared pure) is as follows, with a
lower-numbered category being “earlier in the hierarchy”
in the sense of the previous paragraph:
6.1/3
1.
Declared Pure
6.2/3
2.
Shared Passive
6.3/3
3.
Remote Types
6.4/3
4.
Remote Call Interface
6.5/3
5.
Normal (no restrictions)
Paragraphs 7 through
11 were deleted.
12
Declared pure and shared passive library units are
preelaborated. The declaration of a remote types or remote call interface
library unit is required to be preelaborable. ]
Paragraph 13 was
deleted.
Implementation Permissions
14
Implementations are allowed to define other categorization
pragmas.
Wording Changes from Ada 95
14.a/2
{
8652/0078}
{
AI95-00048-01}
Corrigendum: Clarified that a library subprogram can be a remote
call interface unit.
14.b/2
{
8652/0079}
{
AI95-00208-01}
Corrigendum: Removed the requirement that types be represented
the same in all partitions, because it prevents the definition of heterogeneous
distributed systems and goes much further than required.
Wording Changes from Ada 2005
14.c/3
{
AI05-0206-1}
We now allow private withs of preelaborated units in Remote Types and
Remote Call Interface units; this is documented as an extension in the
sections where this is defined normatively.
14.d/3
{
AI05-0243-1}
We have introduced categorization aspects; these are documented as extensions
in the clauses where they actually are defined.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe