This is series of interviews with software developers interested in Ada programming language. The goal is to promote the community members and the language itself. Do you want to take part in this? Contact me!
The previous interview, with Olivier Henley, can be found here.
My name is Fabien Chouteau, I am embedded software engineer at AdaCore, hobbyist in electronics, instrument making and woodworking.
After my master degree at EPITA in 2010, I joined AdaCore for a six months internship to develop the support of multicore systems (SMP) in the GNAT Ravenscar run-time. Beside a short introduction at school, this internship was my first experience with Ada.
Since then, my technical work at AdaCore mostly revolves around the GNAT Ravenscar run-time (maintenance, customer support, new features, new hardware platforms, certification activities, etc.) as well as the GNATemulator product which is a CPU simulator based on QEMU.
A couple years ago I started the Ada Drivers Library project, at first it was just a way to have fun with an ARM Cortex-M micro-controller board and see how Ada can be used on such hardware. It became a one stop shop for getting started in embedded Ada programming and sparked many other projects like: blog posts, Certyflie, svd2Ada, AdaCore technical demos, etc.
Around the same time, a group of colleagues and I started an effort inside AdaCore to help the Ada/SPARK community grow, and revive the link between AdaCore and the community. Some of the results of this effort are:
And we have exciting plans for the future. As I said, one of the goals is to revive our link with the community, so don’t hesitate to talk to us and share feedback or ideas.
Representation clauses. They are a way to precisely describe the hardware representation of types. In particular it can be used to describe memory-mapped registers of hardware devices. As driver developer I am so glad not to use bit masks and shifts to communicate with the memory mapped registers. With representation clauses, Ada provides the safest and most readable hardware/software interface.
I would say a feature that is both extremely good but also very annoying for embedded, is that Ada allows functions to return objects of unconstrained types (the size in not known at compile time). This feature is awesome for string manipulation, and it is one of the reasons why you don’t need as much pointers in Ada as you need in other languages. But GNAT implements this with a second call stack. Call stacks are already difficult for users to manage on systems where the resources are limited, because it is not easy to know what the size of the stack should be and because detecting stack overflow is complicated. Having two is twice the pain.
For the industrial side of things, it is safe to say that Ada and SPARK have a long and prosperous future in safety critical domains such as aerospace or railway. It is also interesting to see new domains starting to use Ada and SPARK, for instance for security reasons.
On the community side, my main interest is on embedded so I wish to see more people use Ada for this kind of projects. There is also the Alire package manager project which I think will be a game changer for Ada. You can find many interesting projects here and there, but having all of them in a single place, easy to find, easy to integrate into your own code will boost collaboration within the community.
On the real-time/embedded front there is the new profile called Jorvik, it is an evolution of Ravenscar that is less restrictive. One of the differences is that it allows multiple entries on a protected object. For example you can use this to have protected buffers with one entry for producers and one for consumers, which is not possible with Ravenscar. A prototype implementation of Jorvik is already available in the ‘ravenscar-full’ run-times provided with GNAT Pro and GNAT Community.