Ada is a state-of-the art programming language that development teams worldwide are using for critical software: from microkernels and small-footprint, real-time embedded systems to large-scale enterprise applications, and everything in between.

Why use Ada? In short, because you want to write reliable and efficient code, with confidence that it works, and not waste time and effort in the process. Ada is unique among languages in how it helps you detect and eliminate bugs early in the software life cycle, when they are least expensive to correct. And as evidenced by the many successfully fielded applications that need to meet hard time or space constraints, Ada helps you build software that is reliable, safe and secure without sacrificing performance.

At the technical level, Ada has everything you might expect in a modern language:

Extensive compile-time and run-time checks

Full Object Oriented Programming support

Concurrent programming features, including support for multicore

Generic templates

Encapsulation

Hierarchical program composition / programming-in-the-large

Ada also offers specialized support for systems programming and real-time systems. And the most recent version of the language includes contract-based programming (pre- and postconditions), which in effect makes functional requirements part of the source code where they can be verified by dynamic checks or static analysis.

Beyond the benefits from its specific features, there are other reasons to move up to Ada:

Wide range of target processors supported

Rich and mature development environments and toolsets

Smooth integration into existing projects and ease of interoperating with C and C++

Ease of learning

Successful track record in the most challenging industries, including domains where safety or security certification is required

International standardization (ISO) with controlled maintenance of the Ada standard

Ada Comparison Chart

The following chart provides an overview of evolution of the major features of the Ada programming language.

Programming Structure, Modularity

Ada 83

Ada 95

Ada 2005

Ada 2012

Packages

check

check

check

check

Child units

check

check

check

Limited with clauses and
mutually dependent specs

check

check

Generic units

check

check

check

check

Formal packages

check

check

check

Partial parametrization

check

check

Conditional expressions, Case expressions

check

Quantified expressions

check

In-out parameters for functions

check

Iterators

check

Expression functions

check

Object-Oriented Programming

Ada 83

Ada 95

Ada 2005

Ada 2012

Derived types

check

check

check

check

Tagged types

check

check

check

Multiple inheritance of interfaces

check

check

Named access types

check

check

check

check

Access parameters, Access to subprograms

check

check

check

Enhanced anonymous access types

check

check

Aggregates

check

check

check

check

Extension aggregates

check

check

check

Aggregates of limited type

check

check

Unchecked deallocation

check

check

check

check

Controlled types, Accessibility rules

check

check

check

Accessibility rules for anonymous types

check

check

Preconditions and postconditions

check

Type invariants

check

Subtype predicates

check

Concurrency

Ada 83

Ada 95

Ada 2005

Ada 2012

Tasks

check

check

check

check

Protected types, Distributed Systems Annex

check

check

check

Synchronized interfaces

check

check

Delays, Timed calls

check

check

check

check

Real-Time Systems Annex

check

check

check

Ravenscar profile, Scheduling policies

check

check

Multiprocessor affinity, barriers

check

Requeue on synchronized interfaces

check

Ravenscar for multiprocessor systems

check

Scientific Computing

Ada 83

Ada 95

Ada 2005

Ada 2012

Numeric types

check

check

check

check

Complex types

check

check

check

Vector/matrix libraries

check

check

Standard
Libraries

Ada 83

Ada 95

Ada 2005

Ada 2012

Input/output

check

check

check

check

Elementary functions

check

check

check

Containers

check

check

Bounded Containers, holder containers, multiway trees

check

Task-safe queues

check

Character
Support

Ada 83

Ada 95

Ada 2005

Ada 2012

7-bit ASCII

check

check

check

check

8/16 bit

check

check

check

8/16/32 bit (full unicode)

check

check

String Encoding package

check

History of Ada

Ada was originally developed in the early 1980s (this version is generally known as Ada 83) by a team led by Dr. Jean Ichbiah at CII-Honeywell-Bull in France. The language was revised and enhanced in an upward compatible fashion in the early 1990s, under the leadership of Mr. Tucker Taft from Intermetrics in the U.S. The resulting language, Ada 95, was the first internationally standardized (ISO) Object-Oriented Language. Under the auspices of ISO, a further (minor) revision known as Ada 2005 was completed as an amendment to the standard. The most recent version of the language standard is Ada 2012, which has introduced full support for contract-based programming (including subprogram pre- and postconditions) among other features.

The name “Ada” is not an acronym; it was chosen in honor of Augusta Ada Lovelace (1815-1852), a mathematician who is sometimes regarded as the world’s first programmer because of her work with Charles Babbage. She was also the daughter of the poet Lord Byron.