Clearing the Air

I keep seeing the same myths about Ada appear.

I’m writing these in the truthful form, rather than stating the myth.

Note

The information here is for educational purposes only and not for the purpose of providing legal advice. You should consult with a qualified and licensed legal professional prior to making any legal decisions.

Ada is not a dead language

Ada versions appeared as Ada 83, Ada 95, Ada 2005 and Ada 2012. A new version referred to as “Ada 202x” is in development.

Ada now has a build and dependency management tool called Alire. This simplifies building and running your code, while also providing access to a growing set of libraries and programs. Alire 1.1 (in release candidate) also supports installing of toolchains.

Ada can be used for free

Ada has a free front-end for GCC called GNAT. Just like using GCC to compile C or C++ code, it’s free as in freedom (open-source) and as in beer (free to use). This version comes from the Free Software Foundation (FSF) and often referred to as “FSF GNAT”.

Yes, there are also commercial compilers which are not free to use.

Ada code does not have to be GPL

FSF GNAT is licensed with the GCC Runtime exception:

Alire 1.1 (in release candidate) supports downloading and installing the FSF GNAT toolchain for you.

Warning

However, there’s a version of GNAT released by AdaCore called “GNAT Community Edition” which is similar to FSF GNAT but does not provide the runtime exception.

AdaCore does not “own” Ada

The Ada language is just an ISO-standard. Though they initially helped develop GNAT and continue to contribute back to FSF GNAT, AdaCore does not own the Ada language.

Ada runs on more than embedded systems

Ada provides low-level control and interfacing to C to develop programs which can run on embedded or on consumer computers. This includes specifying binary alignment and layout of types (representation clauses), calling compiling intrinsics, running assembly code, and controlling memory allocation.

You can also do the things you’d expect in a systems programming language, in addition to having higher level constructs such as built-in containers, a module system (packages), polymorphism, and concurrency features.