Foreword
This document is the Ada Reference Manual. The International
Standard for the programming language Ada is ISO/IEC 8652:2023(E). The
International Standard is derived from the Ada Reference Manual, with
various non-normative changes. In particular, the International Standard
numbers clauses differently, omits paragraph numbers, eliminates the
Acknowledgements, and modifies various front matter such as the Title
page and the Foreword.
The Ada Working Group ISO/IEC JTC 1/SC 22/WG 9 is
tasked by ISO with the work item to interpret and maintain the International
Standard and to produce Technical Corrigenda, as appropriate. The technical
work on the International Standard is performed by the Ada Rapporteur
Group (ARG) of WG 9.
AXE Consultants produces the Ada Reference Manual
in consultation with the ARG, along with drafts of other documents as
needed. ISO/IEC documents often list the individual changes that need
to be made to the text of a Standard, rather than simply updating the
document. As such, an International Standard is often found in several
parts, while the Ada Reference Manual is always a single document.
In June 2016, WG 9 approved a tentative schedule
for the preparation of an Amendment or Revision to the International
Standard, with a delivery no earlier than 2018. In July 2019, WG 9 approved
an additional review and prototyping period for this revision, extending
the delivery to no earlier than late 2020. The draft standard was delivered
to WG 9 in July 2021, and the Standard was published as ISO/IEC 8652:2023
in May 2023.
This Ada Reference Manual replaces the edition of
2012. It modifies the previous edition by making changes and additions
that improve the capability of the language and the reliability of programs
written in the language.
Significant changes in this edition are as follows:
Improved support for parallel execution is provided
via the introduction of parallel loops, parallel blocks, parallel container
iteration, and parallel reduction.
More precise specification of subprogram interfaces
is supported via the new aspects Global, Global'Class, and Nonblocking.
The Global aspects, in particular, help to determine whether two constructs
can safely execute in parallel.
Pre and Post aspects can now be specified for access-to-subprogram
types and for generic formal subprograms; a postcondition for the default
initialization of a type can be specified using the new Default_Initial_Condition
aspect.
The behavior of many predefined container operations
is now more precisely specified by using pre- and postcondition specifications
instead of English descriptions; a restricted (“stable”)
view for most containers is introduced to support more efficient iteration.
More flexible uses of static expressions are supported
via the introduction of static expression functions along with fewer
restrictions on static strings.
The Image attribute is supported for nonscalar
types, and a user-specifiable attribute Put_Image is provided, which
determines the value of the Image attribute for a user-defined type.
The use of numeric and string literals is generalized
to allow their use with other categories of types, via the new aspects
Integer_Literal, Real_Literal, and String_Literal.
Array and record aggregates are made more flexible:
index parameters are allowed in an array aggregate to define the components
as a function of their array index; discriminants can be defined more
flexibly within an aggregate for a variant record type.
New types of aggregates are provided: delta aggregates
to allow the construction of a new object by incremental updates to an
existing object; container aggregates to allow construction of an object
of a container type by directly specifying its elements.
A shorthand is provided, using the token '@', to
refer to the target of an assignment statement in the expression defining
its new value.
Declare expressions are provided that permit the
definition and use of local constants or renamings, to allow a large
expression to be simplified by defining common parts as named entities.
Support for lightweight iteration is added via
the introduction of procedural iterators.
Support for the map-reduce programming strategy
is added via the introduction of reduction expressions.
For constructs that use iterators of any sort,
a filter can be specified that restricts the elements produced by the
iteration to those that satisfy the condition of the filter.
Predefined packages supporting arbitrary-precision
integer and real arithmetic are provided.
The Jorvik profile is introduced to support hard
real-time applications that want to go beyond the restrictions of the
Ravenscar profile.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe