Ada: Overview

Ada is a compiled, statically typed language designed for software that must not fail. It runs air-traffic systems, avionics, railway signaling, spacecraft, and medical devices — everywhere a defect costs more than a delay. This page explains why Ada exists, where it runs today, and how the rest of this track is organized.

Why Ada Exists

Ada was commissioned by the United States Department of Defense in the late 1970s because its embedded software was written in dozens of incompatible languages. A design competition led by Jean Ichbiah produced the language, which became a military standard in 1983. It was named after Ada Lovelace, the first person to describe a program for a machine.

The design goal was never convenience — it was defect reduction before shipment. Ada achieves it with three mechanisms that most mainstream languages still lack:

  • Strong static typing with programmer-defined ranges. A Day_Of_Month type that only accepts 1..31 rejects an invalid date at compile time or the instant it is assigned — not during a 3 a.m. production outage.
  • Explicit contracts between program units. Packages, preconditions, and postconditions state what each unit promises, and the compiler verifies both sides of the promise.
  • Built-in concurrency. Tasks, entries, and protected objects are part of the language, so synchronization is visible in the source instead of hidden inside a library.

The standards

Ada is an ISO standard, revised roughly every decade: Ada 83, Ada 95 (object-oriented, child libraries), Ada 2005, Ada 2012 (contracts as aspects, which this track teaches), and Ada 2022 (the current revision). The reference manuals are freely available online — this track targets Ada 2022 and notes version differences where they matter.

Where Ada Runs Today

Ada is invisible when it works — which is the point. Representative domains include:

  • Avionics and space: flight-control software, the European Space Agency's launchers and probes, aircraft autopilots.
  • Rail and air-traffic control: signaling interlocking systems across Europe and North America.
  • Medical and automotive: pacemakers, infusion pumps, engine controllers — anywhere a recall costs lives.
  • Security-critical infrastructure: secure payment terminals and cryptographic co-processors.

Learning Ada therefore teaches something transferable: how to structure a program so that entire classes of bugs are impossible to write, whatever language you ship in.

The Toolchain at a Glance

Ada compiles to native machine code. The dominant compiler is GNAT, the Ada front end of GCC — free software, available on every major OS. Around it sit two tools you will meet on the Setup page: Alire, the package manager that fetches libraries, and GPRbuild, the build engine that compiles units in dependency order.

The pipeline below is the whole story: source files go in, a checked native executable comes out.

Ada build pipeline from Alire through GPRbuild and GNAT to a linked executable
Fig. 1 — Alire drives GPRbuild, which feeds specs and bodies to GNAT; the binder and linker finish the executable.

How the Track Is Organized

The track moves from foundations to expert-level design in seven phases:

PhaseContentsYou can…
1. FoundationsOverview, toolchain, syntaxRun a compiled Ada program you wrote yourself
2. Basic ConstructsTypes, expressions, conditionals, loops, strings, enumerationsExpress everyday logic safely
3. Data & LogicArrays, records, access types, subprograms, I/OModel real data and decompose problems
4. Modular SystemsPackages, exceptions, generics, visibilityBuild multi-unit libraries with real interfaces
5. Advanced ParadigmsOOP, contracts, tasking, standard libraryDesign concurrent, provable systems
6. Practice & DemosLab examples, study projects, open source projectsRead and extend real Ada code
7. ReferenceReferences and free resourcesKeep learning after the track

Each lesson pairs prose with commented, compilable examples, and the Lab Examples page collects runnable single-file demos you can open in the site's code viewer.