1.3 Terms and Definitions
This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue
Terms are defined throughout this document, indicated by italic type. Terms explicitly defined in this document are not to be presumed to refer implicitly to similar terms defined elsewhere. Mathematical terms not defined in this document are to be interpreted according to the CRC Concise Encyclopedia of Mathematics, Second Edition. Other terms not defined in this document are to be interpreted according to the Webster's Third New International Dictionary of the English Language. Informal descriptions of some terms are also given below.
The index contains an entry for every defined term.
The contents of the CRC Concise Encyclopedia of Mathematics, Second Edition can be accessed on http://www.mathworld.com. The ISBN number of the book is ISBN 1584883472.
The definitions found in this subclause are short, descriptive definitions. These are most useful for comprehension when an exact meaning is not needed. More formal, detailed definitions are found in the body of the Reference Manual; these are needed to determine the exact application of rules to constructs and entities.
To see the difference, consider “aliased view”. The descriptive definition is “a view of an object that can be designated by an access value”. The formal definition is a lengthy paragraph in 3.10 that defines 10 separate constructs as aliased views. In order to reason about a language rule that requires an aliased view in a particular context, one needs to look at the list of constructs in order to determine if the object in hand is actually an aliased view. The descriptive definition is no help in this case.
Term entry: Each term defined in this subclause is marked like this in the body of the AARM near its detailed formal definition.
Here are some AARM-only definitions: The Ada Rapporteur Group (ARG) interprets the Ada Reference Manual. An Ada Issue (AI) is a numbered ruling from the ARG. Ada Issues created for Ada 83 are denoted as "AI83", while Ada Issues created for Ada 95 are denoted as "AI95" in this document. Similarly, Ada Issues created for Ada 2005 are denoted as "AI05", Ada Issues created for Ada 2012 are denoted as "AI12", and Ada Issues created for Ada 2022 are denoted as "AI22". The Ada Commentary Integration Document (ACID) is an edition of the Ada 83 RM in which clearly marked insertions and deletions indicate the effect of integrating the approved AIs. The Uniformity Rapporteur Group (URG) issued recommendations intended to increase uniformity across Ada implementations. The functions of the URG have been assumed by the ARG. A Uniformity Issue (UI) was a numbered recommendation from the URG. A Defect Report and Response is an official query to WG9 about an error in the standard. Defect Reports are processed by the ARG, and are referenced here by their ISO numbers: 8652/nnnn. Most changes to the Ada 95 standard include reference(s) to the Defect Report(s) that prompted the change. The Ada Conformity Assessment Test Suite (ACATS) is a set of tests intended to check the conformity of Ada implementations to this standard. This set of tests was previously known as the Ada Compiler Validation Capability (ACVC).
1.3.1 Types, Objects, and their Properties
1/5abstract type
- tagged type intended for use as an ancestor of other types, but which is not allowed to have objects of its own
access type- type that has values that designate aliased objects
Note: Access types correspond to “pointer types” or “reference types” in some other languages.
accessibility level
- representation of the lifetime of an entity in terms of the level of dynamic nesting within which the entity is known to exist
aliased view- view of an object that can be designated by an access value
Note: Objects allocated by allocators are aliased. Objects can also be explicitly declared as aliased with the reserved word aliased. The Access attribute can be used to create an access value designating an aliased object.
ancestor of a type
- type itself or, in the case of a type derived from other types, its parent type or one of its progenitor types or one of their ancestors
Note: Ancestor and descendant are inverse relationships.
array type
- composite type whose components are all of the same type
aspect- specifiable property of an entity
aspect_specification
on the declaration of the entity. Some aspects can be queried via attributes.
attribute
- characteristic or property of an entity that can be queried, and in some cases specified
category of types- set of types with one or more common properties, such as primitive operations
Note: A category of types that is closed under derivation is also known as a class.
character type
- enumeration type whose values include characters
class of types- set of types that is closed under derivation, which means that if a given type is in the class, then all types derived from that type are also in the class
Note: The set of types of a class share common properties, such as their primitive operations.
composite type
- type with components, such as an array or record
controlled type- type that supports user-defined assignment and finalization
Note: Objects are always finalized before being destroyed.
default initial condition
- property that holds for every default-initialized object of a given type
derived type- type defined in terms of a parent type and zero or more progenitor types given in a derived type definition
Note 1: A derived type inherits properties such as components and primitive operations from its parent and progenitors.
Note 2: A type together with the types derived from it (directly or indirectly) form a derivation class.
descendant of a type
- type itself or a type derived (directly or indirectly) from it
Note: Descendant and ancestor are inverse relationships.
discrete type
- type that is either an integer type or an enumeration type
discriminant- parameter for a composite type, which can control, for example, the bounds of a component that is an array
Note: A discriminant for a task type can be used to pass data to a task of the type upon its creation.
elementary type
- type that does not have components
enumeration type- type defined by an enumeration of its values, which can be denoted by identifiers or character literals
full type- type that defines a full view
full view- view of a type that reveals all of its properties
Note: There can be other views of the type that reveal fewer properties.
incomplete type
- type that defines an incomplete view
Note: Incomplete types can be used for defining recursive data structures.
incomplete view
- view of a type that reveals minimal properties
Note: The remaining properties are defined by the full view given elsewhere.
indexable container type
- type that has user-defined behavior for indexing, via the Constant_Indexing or Variable_Indexing aspects
integer type- type that represents signed or modular integers
Note: A signed integer type has a base range that includes both positive and negative numbers, and has operations that can raise an exception when the result is outside the base range. A modular type has a base range whose lower bound is zero, and has operations with “wraparound” semantics. Modular types subsume what are called “unsigned types” in some other languages.
interface type
- abstract tagged type that has no components or concrete operations except possibly null procedures
Note: Interface types are used for composing other interfaces and tagged types and thereby provide multiple inheritance. Only an interface type can be used as a progenitor of another type.
invariant
- assertion that is expected to be True for all objects of a given private type when viewed from outside the defining package
iterable container type- type that has user-defined behavior for iteration, via the Default_Iterator and Iterator_Element aspects
limited type- type for which copying (such as in an
assignment_statement
) is not allowed
Note: All types are either limited types or nonlimited types.
needed component
- component of a record type or record extension that is required to have its value specified within a given aggregate
nominal subtype- subtype specified when a view of an object is defined
nonlimited type- type for which copying is allowed
object- entity that contains a value, and is either a constant or a variable
object_declaration
or by an allocator
. A formal parameter is (a view of) an object. A subcomponent of an object is an object.
operational aspect
- aspect that indicates a logical property of an entity, such as the precondition of a subprogram, or the procedure used to write a given type of object to a stream
parent of a derived type- first ancestor type given in the definition of the derived type
Note: The parent can be almost any kind of type, including an interface type.
partial view
- view of a type that reveals only some of its properties
Note: The remaining properties are defined by the full view given elsewhere.
primitive operations of a type
- operations (such as subprograms) declared together with the type declarations
Note: Primitive operations are inherited by other types in the same derivation class of types.
private extension
- type that extends another type, with the additional properties hidden from its clients
private type- type that defines a partial view
Note: Private types can be used for defining abstractions that hide unnecessary details from their clients.
progenitor
- type given in the interface list, if any, of an interface, task, protected, or derived type definition
Note: A progenitor is always an interface type.
protected type
- composite type whose components are accessible only through one of its protected operations, which synchronize concurrent access by multiple tasks
real type- type that has values that are approximations of the real numbers
Note: Floating point and fixed point types are real types.
record extension
- type that extends another type optionally with additional components
record type- composite type consisting of zero or more named components, possibly of different types
reference type- type that has user-defined behavior for “.all”, defined by the Implicit_Dereference aspect
representation aspect- aspect that indicates how an entity is mapped onto the underlying hardware, for example the size or alignment of an object
scalar type- either a discrete type or a real type
stable property- characteristic associated with objects of a given type that is preserved by many of the primitive operations of the type
storage pool object- object associated with one or more access types from which the storage for objects created by allocators of the access type(s) is obtained
Note: Some storage pools can be partitioned into subpools in order to support finer-grained storage management.
stream
- sequence of elements that can be used, along with the stream-oriented attributes, to support marshalling and unmarshalling of values of most types
subtype- type together with optional constraints, null exclusions, and predicates, which constrain the values of the type to the subset that satisfies the implied conditions
synchronized- can be safely operated on by multiple tasks concurrently
Note: Synchronized is used to qualify entities, as in a synchronized interface.
tagged type
- type whose objects each have a run-time type tag, which indicates the specific type for which the object was originally created
Note: Tagged types can be extended with additional components.
task type
- composite type used to represent active entities which execute concurrently and that can communicate via queued task entries
Note: The top-level task of a partition is called the environment task.
type
- defining characteristic of each object and expression of the language, with an associated set of values, and a set of primitive operations that implement the fundamental aspects of its semantics
Note: Types are grouped into categories. Most language-defined categories of types are also classes of types.
view of an entity
- representation of an entity that reveals some or all of the properties of the entity
Note: A single entity can have multiple views.
1.3.2 Subprograms and their Properties
1/5function
- form of subprogram that returns a result and can be called as part of an expression
overriding operation- operation that replaces an inherited primitive operation
Note: Operations can be marked explicitly as overriding or not overriding.
postcondition
- assertion that is expected to be True when a given subprogram returns normally
precondition- assertion that is expected to be True when a given subprogram is called
procedure- form of subprogram that does not return a result and can only be invoked by a statement
subprogram- unit of a program that can be brought into execution in various contexts, with the invocation being a subprogram call that can parameterize the effect of the subprogram through the passing of operands
Note: There are two forms of subprograms: functions, which return values, and procedures, which do not.
1.3.3 Other Syntactic Constructs
1/5aggregate
- construct used to define a value of a composite type by specifying the values of the components of the type
compilation unit- program unit that is separately compiled
compilation_unit
contains either the declaration, the body, or a renaming of a program unit.
construct
- piece of text (explicit or implicit) that is an instance of a syntactic category defined under Syntax
container- structured object that represents a collection of elements all of the same (potentially class-wide) type, such as a vector or a tree
Note: Several predefined container types are provided by the children of package Ada.Containers (see A.18.1).
container aggregate
- construct used to define a value of a type that represents a collection of elements, by explicitly specifying the elements in the collection
core language- clause or annex in which are defined language constructs or capabilities that are provided by all conforming implementations
Note: A construct is said to be part of the core language if it is defined in a core language clause or annex.
declaration
- language construct that associates a name with (a view of) an entity
Note: A declaration can appear explicitly in the program text (an explicit declaration), or can be supposed to occur at a given place in the text as a consequence of the semantics of another construct (an implicit declaration).
generic instance
- nongeneric unit created by the instantiation of a generic unit
generic unit- template for a (nongeneric) program unit
Note 1: The template can be parameterized by objects, types, subprograms, and packages.
Note 2: Generic units can be used to perform the role that macros sometimes play in other languages.
iterator
- construct that is used to loop over the elements of an array or container
Note: Iterators can be user defined, and can perform arbitrary computations to access elements from a container.
iterator filter
- construct that is used to restrict the elements produced by an iteration to those for which a boolean condition evaluates to True
library unit- separately compiled program unit, which is a package, a subprogram, or a generic unit
Note: Library units can have other (logically nested) library units as children, and can have other program units physically nested within them. A root library unit, together with its children and grandchildren and so on, form a subsystem.
master construct
- one of certain executable constructs for which there can be objects or tasks whose lifetime ends when the construct completes
Note: Execution of a master construct is a master, with which objects and tasks are associated for the purposes of waiting and finalization.
needed compilation unit
- compilation unit that is necessary to produce an executable partition, because some entity declared or defined within the unit is used elsewhere in the partition
package- program unit that defines the interface to a group of logically related entities, along with their implementation
Note: Typically, a package contains the declaration of a type (often a private type or private extension) along with the declarations of primitive subprograms of the type, which can be called from outside the package, while their inner workings remain hidden from outside users.
parallel construct
- executable construct that defines multiple activities of a single task that can proceed in parallel, via the execution of multiple logical threads of control
partition- part of a program, which consists of a set of interdependent library units
Note: Each partition can run in a separate address space, possibly on a separate computer. A program can contain just one partition, or it can be distributed across multiple partitions, which can execute concurrently.
pragma
- compiler directive to provide control over and above that provided by the other syntactic constructs of the language
Note: There are language-defined pragmas that give instructions for optimization, listing control, etc. An implementation can support additional (implementation-defined) pragmas.
program
- set of partitions, each of which can execute in a separate address space, possibly on a separate computer
program unit- language construct that is a package, a task unit, a protected unit, a protected entry, a generic unit, or an explicitly declared subprogram other than an enumeration literal
Note: Certain kinds of program units can be separately compiled. Alternatively, they can appear physically nested within other program units.
reduction expression
- expression that defines how to map or transform a collection of values into a new set of values, and then summarize the values by applying an operation to reduce the set to a single value
renaming- declaration that does not define a new entity, but instead defines a new view of an existing entity
specialized needs annex- annex in which are defined language constructs or capabilities that are not necessarily provided by all conforming implementations
subunit- body of a program unit that can be compiled separately from its enclosing program unit
1.3.4 Runtime Actions
1/5assertion
- boolean expression that is expected to be True at run time at certain specified places
Note: Certain pragmas and aspects define various kinds of assertions.
elaboration
- process by which a declaration achieves its run-time effect
Note: Elaboration is one of the forms of execution.
evaluation
- process by which an expression achieves its run-time effect
Note: Evaluation is one of the forms of execution.
execution
- process by which a construct achieves its run-time effect
Note: Execution of a declaration is also called elaboration. Execution of an expression is also called evaluation.
logical thread of control
- activity within the execution of a program that can proceed in parallel with other activities of the same task, or of separate tasks
master- execution of a master construct
Note: Each object and task is associated with a master. When a master is left, associated tasks are awaited and associated objects are finalized.
1.3.5 Exceptional Situations
1/5check
- test made during execution to determine whether a language rule has been violated
exception- kind of exceptional situation
exception occurrence- run-time occurrence of an exceptional situation
handle an exception- perform some actions in response to the arising of an exception
raise an exception- abandon normal program execution so as to draw attention to the fact that the corresponding situation has arisen
suppress a check- assert that the check cannot fail, and request that the compiler optimize by disabling the check
Note: The compiler is not required to honor this request. Suppressing checks that can fail can cause a program to behave in arbitrary ways.