Rationale for Ada 2012
1.3 Overview of changes
It would be tedious
to give a section by section review of the changes as seen by the Reference
Manual language lawyer. Instead, the changes will be presented by areas
as seen by the user. There can be considered to be six areas:
a)
Introduction of dynamic contracts. These can be seen to lead on from
the introduction of the Assert pragma in Ada
2005. New syntax (using with again) introduces aspect specifications
which enable certain properties of entities to be stated where they are
declared rather than later using representation clauses. This is put
to good use in introducing pre- and postconditions for subprograms and
similar assertions for types and subtypes.
b)
More flexible expressions. The introduction of preconditions and so on
increases the need for more powerful forms of expressions. Accordingly,
if expressions, case expressions, quantified expressions and expression
functions are all added. A related change is that membership tests are
generalized.
c)
Structure and visibility control. Functions are now permitted to have
out and in out parameters, and rules are introduced to
minimize the risk of inadvertent dependence on order of evaluation of
parameters and other entities such as aggregates. More flexibility is
permitted with incomplete types and another form of use clause is introduced.
There are minor enhancements to extended return statements.
d)
Tasking and real-time improvements. Almost all of the changes are in
the Real-Time Systems annex. New packages are added for the control of
tasks and budgeting on multiprocessor systems, and the monitoring of
time spent in interrupts. There are also additional facilities for non-preemptive
dispatching, task barriers and suspension objects.
e)
Improvements to other general areas. More flexibility is allowed in the
position of labels, pragmas, and null statements. A number of corrections
are made to the accessibility rules, improvements are made to conversions
of access types, and further control over storage pools is added. The
composability of equality is now the same for both tagged and untagged
record types.
f)
Extensions to the standard library. Variants on the existing container
packages are introduced to handle bounded containers more efficiently.
Additional containers are added for a simple holder, multiway trees and
queues. Moreover, a number of general features have been added to make
containers and other such reusable libraries easier to use. Minor additions
cover directories, locale capabilities, string encoding and further operations
on wide and wide wide characters.
The reader might feel that the changes are quite
extensive but each has an important role to play in making Ada more useful.
Indeed the solution of one problem often leads to auxiliary requirements.
The desire to introduce stronger description of contracts led to the
search for good syntax which led to aspect specifications. And these
strengthened the need for more flexible forms of expressions and so on.
Some changes were driven by outside considerations such as multiprocessors
and others stem from what now seem to be obvious but minor flaws in Ada
2005.
A number of potential changes were rejected as really
unnecessary. For example, the author was at one time enthused by a desire
for fixed point cyclic types. But it proved foolish without base 60 hardware
to match our inheritance of arithmetic in a Babylonian style for angles.
Before looking at the six areas in a little more
detail it is perhaps worth saying a few words about compatibility with
Ada 2005. The guidelines gave the ARG freedom to be sensible in this
area. Of course, the worst incompatibilities are those where a valid
program in Ada 2005 continues to be valid in Ada 2012 but does something
different. It is believed that incompatibilities of this nature will
be most unlikely to arise in practice.
However, incompatibilities whereby a valid Ada 2005
program fails to compile in Ada 2012 are tolerable provided they are
infrequent. A few such incompatibilities are possible. The most obvious
cause is the introduction of one more reserved word, namely some,
which is used in quantified expressions to match all. Thus if
an existing Ada 2005 program uses some as an identifier then it
will need modification. Once again, the introduction of a new category
of unreserved keywords was considered but was eventually rejected as
confusing.
© 2011, 2012, 2013 John Barnes Informatics.
Sponsored in part by: