Rationale for Ada 2012
Programming languages and their user and implementer
communities are living organisms, which — as time goes by —
either decay and perish in obsolescence or evolve in a dynamic combination
of wisdom that comes with age and freshness that comes with vision.
Almost six years after writing the foreword to the
Rationale for Ada 2005, I look with marvel at Ada 2012, at how it has
come about, at the extent of innovation that it carries, and at the competence,
dedication, rigour, perseverance and solidity of the community that has
worked to make it happen.
Ada 2005 was in many ways a beautiful programming
language, perhaps more intellectually than aesthetically, as in the Ada
style of things. It brought the promises of Ada 95 to maturation and
added great features in a number of its key areas of strength. The technology
gap was important for some vendors however, and the user community had
to invest considerable resources in digesting the novelty that it brought
about. Ada 2005 attracted attention to itself from outside its niche
market and gained respect from those knowledgeable in object orientation,
real-time and systems programming and container libraries. So one may
wonder what caused the Ada 2012 project to start at all, aside from the
normative obligation entailed by ISO governance, to confirm, withdraw
or amend every individual standard at five year intervals.
The term that comes to mind to explain the Ada 2012
project is "vision". Ada has always been strong in application
domains where safety and criticality concerns are paramount. For as much
as those domains are intrinsically conservative and not inclined to giant
leaps, their needs, however, are not static and, as of late, have begun
to evolve more rapidly than in the past, to keep pace with internal and
external changes. New needs emerged, which required fresh attention and
timely response. It takes vision to see those needs coming and even more
so to devise a response to them that meets the user requirement, can
be satisfactorily developed by language implementers, and fits in with
the language structure, style and use.
One major emerging need was for specification contracts
to protect the program from incorrect composition at run time. For programs
to be robust, safely reusable and long lasting, you want expressive contracts
to be attached to specifications — contracts that talk to the programmer
and not only to the compiler — so that a solid and semantically
rich understanding can be established between the user of the program
component, be it a procedure or a type, and its implementer. The Ada
2012 response to this challenge was to introduce pre- and post-conditions
for subprograms, invariants for types and predicates for subtypes. This
was a bold move that made Ada the first mainstream programming language
to offer those features as part of an ISO standard.
The other main need was to allow Ada programs to
run, with adequate guarantees of time predictability, on multicore and
multithreaded architectures. The Ada response to this need has been solid
so that users can build on it safely and effectively but also cautious:
multicore architectures and parallel programming are very complex beasts,
which defeat intuition, break composability and threaten predictability.
Much more research is needed to learn how to master all aspects of them
before relevant solutions become mature enough to make it into industrial
technology such as Ada.
While working on those two momentous challenges,
as directed by WG9, the body within ISO/IEC JTC1/SC22 which has responsibility
for the maintenance of the Ada standard, the ARG (the body of technical
experts that actually does the language standard maintenance work) of
course also considered corrective and adaptive maintenance needs arising
from user and implementation experience with Ada 2005. In the end, the
amount of work that went into the Ada 2012 project and the extent of
changes that resulted from it were larger than anticipated: evidence
that there is energy that can be drawn from in the Ada community.
It is a pleasure for me to invite the reader to read
and enjoy this Rationale for Ada 2012, under the knowledgeable hand,
deft guidance, and witty style of its author, John Barnes, who continues
to surprise me with how vast, profound, and complete is his understanding
of the language, no matter how large it grows. It is especially instructive
for me to appreciate how humbling it is to parallel my standing to his,
in all matters of Ada authority.
Producing this book as an LNCS volume is a financial
burden that Ada-Europe would not have been able to sustain alone. On
behalf of Ada-Europe, I am grateful to all those who supported the production
project. Particularly prominent, in fact, and indeed vital, in that respect
has been the role of AdaCore, which I want to acknowledge both personally
Much as happened with the Rationale for Ada 2005,
the readers of the Ada User Journal, the quarterly publication of Ada-Europe,
were able to get first-hand incremental instalments of the Rationale
for Ada 2012. Having stepped from the role of editor-in-chief of the
Ada User Journal to that of President of Ada-Europe I have perhaps gained
in status but lost the privilege of being the first reader of those instalments.
An LNCS volume entirely devoted to the Rationale for Ada 2012 is a great
achievement, as a prestigious venue in itself, and as the continuation
of the Ada presence in a lead vehicle for the publication of advances
in computer science.
It is most likely that writing this Foreword closes
the bracket that inaugurated my service as President of Ada-Europe by
writing the Foreword to the 2005 edition of the Rationale. I am taking
this as a wish that Ada 2012 will have a sufficiently long and successful
life to see me safely go before a new Foreword will have to be written.
Dear reader: I am delighted that I can again present
to your doorstep, or to a library near you, a book of this value; I promise
you that it will be worth your reading.
© 2011, 2012, 2013 John Barnes Informatics.
Sponsored in part by: