Programming Books

13 Excellent Free Books to Learn Ada

Ada is a structured, statically typed, imperative, wide-spectrum, multi-paradigm, object-oriented high-level, ALGOL-like programming language, extended from Pascal and other languages. The language was developed in the late 1970s and early 1980s. Ada is named after Augusta Ada Byron (often now known as Ada Lovelace), daughter of the poet Lord Byron.

Ada has built-in language support for explicit concurrency, offering tasks, synchronous message passing, protected objects, and non-determinism. Ada incorporates the benefits of object-oriented languages without incurring the pervasive overheads.

Other notable features of Ada include: strong typing, inherent reliability, modularity mechanisms (packages), run-time checking, parallel processing, exception handling, the ability to provide abstraction through the package and private type, and generics.

Ada is particularly strong in areas such as real-time applications, low-level hardware access, and safety-critical software, as it has specialized design features, and high reliability. Most errors are detected at compile time and of those remaining many are detected by runtime constraints. While Ada was originally targeted at embedded and real time systems, the Ada 95 revision added support for object-oriented (including dynamic dispatch), numerical, financial, and systems programming. With its readability, scalability, and being designed for development of very large software systems, Ada is a good choice for open source development.

1. Ada 95: The Lovelace Tutorial by David A. Wheeler

Ada 95: The Lovelace TutorialAda 95: The Lovelace Tutorial is an introduction to Ada 95. The book explains the basics of the Ada computer programming language and assumes that the reader has had some exposure to another algorithmic programming language (such as Pascal, C, C++, Fortran, or BASIC).

Lovelace is interactive and contains many short sections, most of which end with a question to help ensure the reader understands the material. Object-oriented facilities of Ada are covered in depth, and the essential features of Ada programming are given thorough treatment.

Lessons cover:

  • Brief Introduction to Ada – What is Ada, simple program, use clauses, simple variable, integers, parameters and exceptions.
  • Basic Ada Structure (Packages) – sections cover program units, declarations and bodies, packages, and compilation units.
  • Ada Lexical Elements – looks at Ada from the bottom up.
  • Procedures and Type Integer – the Ada type Integer is used to store integer values, declare a subprogram (procedure or function) declaration, subprogram Bodies and Local Variables.
  • Statements (if, loop) – If statements, case statements, simple loops, and loop iteration schemes.
  • Basic Types (Float, Boolean, subtypes, record) – type float, Boolean, creating types and subtypes, enumeration, arrays, records, and private and limited private types.
  • Object-Oriented Programming – includes inheritance, dynamic dispatching, encapsulation, standard object-oriented format, abstract types and subprograms, and more.
  • Introduction to String Types – examples types of strings, basics of type strings and more.
  • Basic Input/Output – learn how to use more capabilities of Text_IO, especially how to read and write text files, line and file endings.
  • Exceptions – learn how to define exceptions, how to raise exceptions, and how to handle exceptions.
  • Generics – defining generics, generic formal parameters and more.
  • Access Types – learn how to declare and use access types.
  • Tasks and Protected Types.
  • Ada-related Information.
  • Ada Program Structure.
  • Interfacing to Other Languages (including C and Java).
  • Miscellaneous Ada Subjects.
  • Sample Ada Program “Small”.

The electronic version of the Lovelace tutorial is released under the terms of the GNU General Public License (GPL).

Read the book

2. Ada 95: The Craft of Object-Oriented Programming by John English

Ada 95: The Craft of Object-Oriented ProgrammingAda 95: The Craft of Object-Oriented Programming is an introduction to Ada 95. It uses an example-driven approach which gradually develops small trivial programs into large case-study type programs.

The main focus of this book is on maintenance problems, and using object-oriented technology to write maintainable, extensible programs. Program design is introduced throughout the book, with hypothetical maintenance scenarios used to show design shortcomings, and revise them to accommodate maintenance needs. Practical issues such as debugging programs are tackled, and important Ada features not found in other languages are dealt with practically and early on in the text. Each chapter ends with useful exercises.

Chapters cover:

  • Programming concepts.
  • Fundamentals of Ada – includes program layout, context clauses, strings, and the beginnings of a simple calculator which is extended in later chapters.
  • Statements – covers If statements, assignment statements, compound conditions, the case statement, range tests, the null statement, loops, and exception handling.
  • Procedures, functions and packages – Zeller’s Congruence, declaring procedures and functions. The chapter also examines packages including child packages.
  • Defining new data types – define data types which can be tailored fairly closely to the type of information that a particular program is concerned with modelling. The chapter covers standard data types, integers, subtypes, modular integers, real types, numeric literals, constants, and enumerations. The chapter ends with the type Boolean, and the type Character.
  • Composite data types – record types, strings, declaring array types, multidimensional arrays and more.
  • Exceptions – shows a programmer how to declare and re-raise exceptions, and obtain information about exceptions.
  • Program design and debugging.

Abstract Data Types

  • Private types – examines full and partial views, deferred constants, overloaded operators, the Use type clauses, and more.
  • Designing with abstract data types – separate out the user interface, design the mode, define the view package, implement the ADT packages and more.
  • Dynamic memory allocation – access types, linked lists, doubly linked lists, iterators, and more.
  • Generics – generic packages, generic parameters and more.
  • Building a calculator.

Designing extensible software

  • Tagged types – variant records, tagged types, inheriting primitive operations and more.
  • Polymorphism and dispatching – class-wide types, dispatching, abstract types, and stream input/output.
  • Controlled types – memory leaks, user-defined finalisation, smart pointers, user-designed assignment, and testing controlled types.
  • An object-oriented calculator.
  • Designing a spreadsheet.
  • Multitasking – looks at active objects, task types, communicating with tasks, sharing data between tasks, and more.
  • Loose ends.

Permission is given to redistribute this work for non-profit educational use only.

Read the book

3. Ada in Action by Do-While Jones

Ada in ActionAda in Action explores many selected advanced features and constructs of ADA and explains how to use them for the best results. It provides examples of how to write clear, correct, maintenance code and gives the reader re-usable components that can be used without modification in their own programs.

The book shows the reader to apply good software engineering principles and techniques to ADA programs through tested and proven methods. The text will be of benefit to military software and commercial software engineers and programmers, educational institutions and ADA programmers.

Chapters cover:

  • Introduction.
  • Numeric Considerations – examines the POOR_COORDINATES package, the STANDARD_INTEGERS package, the non-existent STANDARD_FLOATS package, DIM_INT_32 package, generic INTEGER_UNITS package, generic FLOAT_UNITS package, DIM_FLOAT package, and more.
  • IO Utilities – ASCII_UTILITIES package, TEXT_IO package, VIRTUAL_TERMINAL package, SCROLL_TERMINAL package, FORM_TERMINAL package, and more.
  • Programming isn’t software engineering – looks at the show tool, the more tool, the write tool, the line tool, the search tool, and more.
  • Testing software components and programs.

The book is released under an open source license.

Read the book

4. Ada 95 Rationale – The Language – The Standard Libraries by John Barnes

Ada 95 Rationale - The Language - The Standard LibrariesAda 95 Rationale: The Language – The Standard Libraries describes the rationale for Ada 95, the revised International Standard. It introduces Ada 95 and its powerful new mechanisms, and explains the rationale behind them.

The first part is an Introduction to Ada 95; it presents a general discussion of the scope and objectives of Ada 95 and its major technical features. The second part contains a more detailed chapter by chapter account of the Core language. The third part covers the various Annexes which address the predefined environment and the needs of specialized application areas.

Chapters explore:


  • Evolution of Ada 95.
  • Highlights of Ada 95 – works through the major new features of Ada 95 and the consequential benefits as seen by the general Ada user.
  • Overview of the Ada Language – explores objects, types, classes and operations, statements, expressions and elaboration, system construction, multitasking, exception handling, low level programming, standard library, and application specific facilities.

The Core Language

  • Introduction.
  • Lexical Elements – reserved words and identifiers, program text, pragmas, and requirements summary.
  • Types and Expressions – types, classes, objects, and views, character types, numeric types, composite types, array types, record types, access types, type conversion, staticness, and more.
  • Object Oriented Programming – describes the various ways in which object oriented programming is achieved in Ada 95.
  • Statements.
  • Subprograms – covers other relatively minor improvements to subprograms.
  • Packages – a number of important changes to the language are addressed in this chapter.
  • Visibility Rules – visibility and scope rules are rewritten to make them consistent and clearer, the use type clause is introduced for operators, renaming is now allowed for subprogram bodies, generic units and library units, and a number of minor improvements.
  • Tasking – protected types, the Requeue statement, timing and more.
  • Program Structure and Compilation Issues – provides more examples of important changes in the overall structural area of the language, and discusses other topics of a structural nature.
  • Exceptions.
  • Generics.
  • Representation Issues.

The Annexes

  • A Predefined Language Environment.
  • Interface to Other Languages.
  • Systems Programming.
  • Real-Time Systems.
  • Distributed Systems.
  • Information Systems.
  • Numerics.
  • Safety and Security.

This package may be freely copied and distributed, if accompanied by a statement, and provided that integral copies of all files are included (i.e. no change whatsoever is allowed).

Read the book

Next page: Page 2 – Ada Distilled and more books

Pages in this article:
Page 1 – Ada 95: The Lovelace Tutorial and more books
Page 2 – Ada Distilled and more books
Page 3 – SPARK Ada for the MISRA-C Developer and more books

All books in this series:

Free Programming Books
AdaALGOL-like programming language, extended from Pascal and other languages
AgdaDependently typed functional language based on intuitionistic Type Theory
ArduinoInexpensive, flexible, open source microcontroller platform
AssemblyAs close to writing machine code without writing in pure hexadecimal
AwkVersatile language designed for pattern scanning and processing language
BashShell and command language; popular both as a shell and a scripting language
BASICBeginner’s All-purpose Symbolic Instruction Code
CGeneral-purpose, procedural, portable, high-level language
C++General-purpose, portable, free-form, multi-paradigm language
C#Combines the power and flexibility of C++ with the simplicity of Visual Basic
ClojureDialect of the Lisp programming language
ClojureScriptCompiler for Clojure that targets JavaScript
COBOLCommon Business-Oriented Language
CoffeeScriptTranscompiles into JavaScript inspired by Ruby, Python and Haskell
CoqDependently typed language similar to Agda, Idris, F* and others
CrystalGeneral-purpose, concurrent, multi-paradigm, object-oriented language
CSSCSS (Cascading Style Sheets) specifies a web page’s appearance
DGeneral-purpose systems programming language with a C-like syntax
DartClient-optimized language for fast apps on multiple platforms
DylanMulti-paradigm language supporting functional and object-oriented coding
ECMAScriptBest known as the language embedded in web browsers
EiffelObject-oriented language designed by Bertrand Meyer
ElixirRelatively new functional language running on the Erlang virtual machine
ErlangGeneral-purpose, concurrent, declarative, functional language
F#Uses functional, imperative, and object-oriented programming methods
FactorDynamic stack-based programming language
ForthImperative stack-based programming language
FortranThe first high-level language, using the first compiler
GoCompiled, statically typed programming language
GroovyPowerful, optionally typed and dynamic language
HaskellStandardized, general-purpose, polymorphically, statically typed language
HTMLHyperText Markup Language
IconWide variety of features for processing and presenting symbolic data
JArray programming language based primarily on APL
JavaGeneral-purpose, concurrent, class-based, object-oriented, high-level language
JavaScriptInterpreted, prototype-based, scripting language
JuliaHigh-level, high-performance language for technical computing
KotlinMore modern version of Java
LabVIEWDesigned to enable domain experts to build power systems quickly
LaTeXProfessional document preparation system and document markup language
LispUnique features - excellent to study programming constructs
LogoDialect of Lisp that features interactivity, modularity, extensibility
LuaDesigned as an embeddable scripting language
MarkdownPlain text formatting syntax designed to be easy-to-read and easy-to-write
Objective-CObject-oriented language that adds Smalltalk-style messaging to C
OCamlThe main implementation of the Caml language
PascalImperative and procedural language designed in the late 1960s
PerlHigh-level, general-purpose, interpreted, scripting, dynamic language
PHPPHP has been at the helm of the web for many years
PostScriptInterpreted, stack-based and Turing complete language
PrologA general purpose, declarative, logic programming language
PureScriptSmall strongly, statically typed language compiling to JavaScript
PythonGeneral-purpose, structured, powerful language
QMLHierarchical declarative language for user interface layout - JSON-like syntax
RDe facto standard among statisticians and data analysts
RacketGeneral-purpose, object-oriented, multi-paradigm, functional language
RakuMember of the Perl family of programming languages
RubyGeneral purpose, scripting, structured, flexible, fully object-oriented language
RustIdeal for systems, embedded, and other performance critical code
ScalaModern, object-functional, multi-paradigm, Java-based language
SchemeA general-purpose, functional language descended from Lisp and Algol
ScratchVisual programming language designed for 8-16 year-old children
SQLAccess and manipulate data held in a relational database management system
Standard MLGeneral-purpose functional language characterized as "Lisp with types"
SwiftPowerful and intuitive general-purpose programming language
TclDynamic language based on concepts of Lisp, C, and Unix shells
TeXMarkup and programming language - create professional quality typeset text
TypeScriptStrict syntactical superset of JavaScript adding optional static typing
ValaObject-oriented language, syntactically similar to C#
VHDLHardware description language used in electronic design automation
VimLPowerful scripting language of the Vim editor
XMLRules for defining semantic tags describing structure ad meaning
Notify of

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Inline Feedbacks
View all comments