Go to the first, previous, next, last section, table of contents.


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. A categorization pragma is a library unit pragma, See section 10.1.5 Pragmas and Program Units, that restricts the declarations, child units, or semantic dependences of the library unit to which it applies. A categorized library unit is a library unit to which a categorization pragma applies.
  3. The pragmas Shared_Passive, Remote_Types, and Remote_Call_Interface are categorization pragmas. In addition, for the purposes of this Annex, the pragma Pure, See section 10.2.1 Elaboration Control is considered a categorization pragma.
  4. A library package or generic library package is called a shared passive library unit if a Shared_Passive pragma applies to it. A library package or generic library package is called a remote types library unit if a Remote_Types pragma applies to it. A library package or generic library package is called a remote call interface if a Remote_Call_Interface pragma applies to it. A normal library unit is one to which no categorization pragma applies.
  5. 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, except that the body of a remote types or remote call interface library unit is unrestricted.
  6. The overall hierarchy (including declared pure) is as follows:
  7. Declared Pure
    Can depend only on other declared pure library units;
    
  8. Shared Passive
    Can depend only on other shared passive or declared pure
    library units;
    
  9. Remote Types
    The declaration of the library unit can depend only on other
    remote types library units, or one of the above; the body of
    the library unit is unrestricted;
    
  10. Remote Call Interface
    The declaration of the library unit can depend only on other
    remote call interfaces, or one of the above; the body of the
    library unit is unrestricted;
    
  11. Normal
    Unrestricted.
    
  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.

    Implementation Requirements

  13. For a given library-level type declared in a preelaborated library unit or in the declaration of a remote types or remote call interface library unit, the implementation shall choose the same representation for the type upon each elaboration of the type's declaration for different partitions of the same program.

    Implementation Permissions

  14. Implementations are allowed to define other categorization pragmas.


Go to the first, previous, next, last section, table of contents.