Remote Types Library Units
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Ada Reference Manual — Legal Information

# 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.

#### Syntax

2
The form of a pragma Remote_Types is as follows:
3
pragma Remote_Types[(library_unit_ name)];

#### Legality Rules

4
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;

8/2

- the full view of each type declared in the visible part of the library unit that has any available stream attributes shall support external streaming (see 13.13.2).

9/1
An access type declared in the visible part of a remote types or remote call interface library unit is called a remote access type. Such a type shall be:
9.1/1

- an access-to-subprogram type, or

9.2/1

- 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
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/2

- A value of a remote access-to-subprogram type shall be converted only to or from 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/2

- 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 support external streaming (see 13.13.2);

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/2

- The Storage_Pool attribute is not defined for a remote access-to-class-wide type; 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. The Storage_Size attribute of a remote access-to-class-wide type yields 0; it is not allowed in an attribute_definition_clause.

NOTES
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.

Sponsored by Ada-Europe