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