E.1 Partitions
The partitions of a distributed program are classified 
as either active or passive. 
Post-Compilation Rules
An 
active 
partition is a partition as defined in 
10.2. 
A 
passive partition is a partition that has no thread of control 
of its own, whose library units are all preelaborated, and whose data 
and subprograms are accessible to one or more active partitions. 
A passive partition shall include only 
library_items 
that either are declared pure or are shared passive (see 
10.2.1 
and 
E.2.1).
An active partition shall be configured on a processing 
node. A passive partition shall be configured either on a storage node 
or on a processing node.
The configuration of the partitions of a program 
onto a distributed system shall be consistent with the possibility for 
data references or calls between the partitions implied by their semantic 
dependences. 
Any reference to data or call of a subprogram 
across partitions is called a 
remote access. 
Dynamic Semantics
A 
library_item 
is elaborated as part of the elaboration of each partition that includes 
it. If a normal library unit (see 
E.2) has 
state, then a separate copy of the state exists in each active partition 
that elaborates it. The state evolves independently in each such partition.
An 
active partition 
terminates when its environment task terminates. 
A partition becomes 
inaccessible if it terminates or if it is 
aborted. An active partition is aborted when its environment task 
is aborted. In addition, if a partition fails during its elaboration, 
it becomes inaccessible to other partitions. Other implementation-defined 
events can also result in a partition becoming inaccessible. 
For a 
prefix 
D that denotes a library-level declaration, excepting a declaration of 
or within a declared-pure library unit, the following attribute is defined: 
D'Partition_Id
Denotes a value of the type 
universal_integer 
that identifies the partition in which D was elaborated. If D denotes 
the declaration of a remote call interface library unit (see 
E.2.3) 
the given partition is the one where the body of D was elaborated. 
 
Bounded (Run-Time) Errors
 It is a bounded error for there 
to be cyclic elaboration dependences between the active partitions of 
a single distributed program. 
The possible effects, 
in each of the partitions involved, are deadlock during elaboration, 
or the raising of Communication_Error or Program_Error. 
 
Implementation Permissions
An implementation may allow multiple active or passive 
partitions to be configured on a single processing node, and multiple 
passive partitions to be configured on a single storage node. In these 
cases, the scheduling policies, treatment of priorities, and management 
of shared resources between these partitions are implementation defined. 
An implementation may allow separate copies of an 
active partition to be configured on different processing nodes, and 
to provide appropriate interactions between the copies to present a consistent 
state of the partition to other active partitions. 
In an implementation, the partitions of a distributed 
program need not be loaded and elaborated all at the same time; they 
may be loaded and elaborated one at a time over an extended period of 
time. An implementation may provide facilities to abort and reload a 
partition during the execution of a distributed program.
An implementation may allow the state of some of 
the partitions of a distributed program to persist while other partitions 
of the program terminate and are later reinvoked. 
3  Library units are grouped into partitions 
after compile time, but before run time. At compile time, only the relevant 
library unit properties are identified using categorization pragmas.
4  The value returned by the Partition_Id 
attribute can be used as a parameter to implementation-provided subprograms 
in order to query information about the partition.
 Ada 2005 and 2012 Editions sponsored in part by Ada-Europe
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe