Contents   Index   Previous   Next
 E.2.2 Remote Types Library Units
1
   [A remote types library unit supports the definition
of types intended for use in communication between active partitions.]
Language Design Principles
1.a
The restrictions governing a remote
types package are similar to those for a declared pure package. However,
the restrictions are relaxed deliberately to allow such a package to
contain declarations that violate the stateless property of pure packages,
though it is presumed that any state-dependent properties are essentially
invisible outside the package. 
Syntax
2
{categorization
pragma (Remote_Types) [partial]} {pragma,
categorization (Remote_Types) [partial]} The
form of a 
pragma Remote_Types is
as follows: 
 
3
  pragma Remote_Types[(
library_unit_name)];
 
Legality Rules
4
   {remote
types library unit} A 
remote types
library unit is a library unit to which the pragma Remote_Types applies.
The following restrictions apply to the declaration of such a library
unit: 
 
5
- [it shall be preelaborable;]
 
6
- it shall depend semantically only on declared pure, shared
passive, or other remote types library units;
 
7
- it shall not contain the declaration of any variable within
the visible part of the library unit; 
 
7.a
Reason: This is essentially
a ``methodological'' restriction. A separate copy of a remote types package
is included in each partition that references it, just like a normal
package. Nevertheless, a remote types package is thought of as an ``essentially
pure'' package for defining types to be used for interpartition communication,
and it could be misleading to declare visible objects when no remote
data access is actually being provided. 
8
- if the full view of a type declared in the visible part
of the library unit has a part that is of a non-remote access type, then
that access type, or the type of some part that includes the access type
subcomponent, shall have user-specified Read and Write attributes. 
 
8.a
Reason: This is to prevent
the use of the predefined Read and Write attributes of an access type
as part of the Read and Write attributes of a visible type. 
9/1
     {
8652/0082} 
  
{remote access type} An 
  access type declared in the visible part of a remote types or remote call interface 
  library unit is called a 
remote access type. 
{remote 
  access-to-subprogram type} {remote 
  access-to-class-wide type} Such a type shall 
  be
: either an access-to-subprogram type or a general access type that 
  designates a class-wide limited private type. 
9.1/1
9.2/1
  - {8652/0082} a general 
    access type that designates a class-wide limited private type or a class-wide 
    private type extension all of whose ancestors are either private type extensions 
    or limited private types. 
 
9.3/1
       {
8652/0081} 
  
A type that is derived from a remote access type is also a remote access 
  type. 
10
    The following restrictions
apply to the use of a remote access-to-subprogram type: 
11
- A value of a remote access-to-subprogram type shall be
converted only to another (subtype-conformant) remote access-to-subprogram
type;
 
12
- The prefix of an Access
attribute_reference that yields
a value of a remote access-to-subprogram type shall statically denote
a (subtype-conformant) remote subprogram. 
 
13
    The following restrictions
apply to the use of a remote access-to-class-wide type: 
14/1
  - {8652/0083} The primitive 
    subprograms of the corresponding specific limited private type shall only 
    have access parameters if they are controlling formal parameters; each 
    non-controlling formal parameter shall have either a nonlimited type or a 
    type with
the types of all the non-controlling formal parameters shall 
    have Read and Write attributes specified via an attribute_definition_clause;. 
15
- A value of a remote access-to-class-wide type shall be
explicitly converted only to another remote access-to-class-wide type;
 
16/1
  - A value of a remote access-to-class-wide type shall be dereferenced 
    (or implicitly converted to an anonymous access type) only as part of a dispatching 
    call where the value designates a controlling operand of the call (see E.4, 
    ``Remote Subprogram Calls'').
; 
17/1
- The Storage_Pool and Storage_Size attributes are not defined
for remote access-to-class-wide types; the expected type for an allocator
shall not be a remote access-to-class-wide type; a remote access-to-class-wide
type shall not be an actual parameter for a generic formal access type.
;
 
17.a
Reason: All three of these
restrictions are because there is no storage pool associated with a remote
access-to-class-wide type. 
18
5  A remote types library unit need 
  not be pure, and the types it defines may include levels of indirection implemented 
  by using access types. User-specified Read and Write attributes (see 13.13.2) 
  provide for sending values of such a type between active partitions, with Write 
  marshalling the representation, and Read unmarshalling any levels of indirection. 
   
Contents   Index   Previous   Next   Legal