Ada Reference Manual (Ada 2022) — Legal Information

# 1.1.3 Conformity of an Implementation

#### Implementation Requirements

1
A conforming implementation shall:
2
Translate and correctly execute legal programs written in Ada, provided that they are not so large as to exceed the capacity of the implementation;
3
Identify all programs or program units that are so large as to exceed the capacity of the implementation (or raise an appropriate exception at run time);
4
Identify all programs or program units that contain errors whose detection is required by this Reference Manual;
5
Supply all language-defined library units required by this Reference Manual;
6
Contain no variations except those explicitly permitted by this Reference Manual, or those that are impossible or impractical to avoid given the implementation's execution environment;
7
Specify all such variations in the manner prescribed by this Reference Manual.
8
The external effect of the execution of an Ada program is defined in terms of its interactions with its external environment. The following are defined as external interactions:
9
Any interaction with an external file (see A.7);
10
The execution of certain code_statements (see 13.8); which code_statements cause external interactions is implementation defined.
11
Any call on an imported subprogram (see Annex B), including any parameters passed to it;
12
Any result returned or exception propagated from a main subprogram (see 10.2) or an exported subprogram (see Annex B) to an external caller;
13
Any read or update of an atomic or volatile object (see C.6);
14
The values of imported and exported objects (see Annex B) at the time of any other interaction with the external environment.
15
A conforming implementation of this Reference Manual shall produce for the execution of a given Ada program a set of interactions with the external environment whose order and timing are consistent with the definitions and requirements of this Reference Manual for the semantics of the given program.
16/5
An implementation that conforms to this Reference Manual shall support each capability required by the core language as specified. In addition, an implementation that conforms to this Reference Manual may conform to one or more Specialized Needs Annexes (or to none). Conformance to a Specialized Needs Annex means that each capability required by the Annex shall be provided as specified.
17/3
An implementation conforming to this Reference Manual may provide additional aspects, attributes, library units, and pragmas. However, it shall not provide any aspect, attribute, library unit, or pragma having the same name as an aspect, attribute, library unit, or pragma (respectively) specified in a Specialized Needs Annex unless the provided construct is either as specified in the Specialized Needs Annex or is more limited in capability than that required by the Annex. A program that attempts to use an unsupported capability of an Annex shall either be identified by the implementation before run time or shall raise an exception at run time.
17.1/5
For an implementation that conforms to this Reference Manual, the implementation of a language-defined unit shall abide by all postconditions, type invariants, and default initial conditions specified for the unit by this document (see 11.4.2).

#### Documentation Requirements

18
Certain aspects of the semantics are defined to be either implementation defined or unspecified. In such cases, the set of possible effects is specified, and the implementation may choose any effect in the set. Implementations shall document their behavior in implementation-defined situations, but documentation is not required for unspecified situations. The implementation-defined characteristics are summarized in M.2.
19
The implementation may choose to document implementation-defined behavior either by documenting what happens in general, or by providing some mechanism for the user to determine what happens in a particular case.

#### Implementation Advice

20
If an implementation detects the use of an unsupported Specialized Needs Annex feature at run time, it should raise Program_Error if feasible.
21
If an implementation wishes to provide implementation-defined extensions to the functionality of a language-defined library unit, it should normally do so by adding children to the library unit.
22/5
NOTE The above requirements imply that an implementation conforming to this Reference Manual can support some of the capabilities required by a Specialized Needs Annex without supporting all required capabilities.

Ada 2005 and 2012 Editions sponsored in part by Ada-Europe