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 Edward Fish, can be found here.
While at school I created my own Z80 computer, because my father didn't want to buy one. Instead, he gave me the Zilog datasheets and encouraged me to build one. I started to write the code in Assembly on a paper and I typed the hexadecimal opcodes by hand on the EPROM programmer. It was fun, difficult but I learnt a lot. My father was also a defensor of Ada (retired now), and he also gave me the opportunity to learn Ada83 with the Alsys compiler in 1986.
After being graduated from ISEP in 1990, I worked on an Ada83 program for the French army during my military service. It was challenging due to the lack of access types for functions and procedures (introduced in Ada 95). Ada generic was the solution but there were bugs on the Alsys compiler (and MS-DOS didn't helped either).
Later I created another computer board based on 68HC11 and to use it I also did a complete port of the GNU compiler, the GNU binutils and the GNU debugger. My work was integrated in the FSF sources in 2000. The GNAT Ada compiler was working! I was able to run a small Ada program that fit in less than 256 bytes!
With the support for interface types in Ada 2005, I realized I won't be blocked anymore by a number of limitations in Ada 83 and 95. I started to create a complete framework that would allow building web applications by using Java-like design patterns. Since 2009, I'm building the Ada Web Application framework by using my professional experience in developing Java J2EE applications. Java J2EE is slow and bloated but it defines several useful patterns that help in designing servers. I just pick some of them and implement them in Ada.
In 2016, AdaCore released a first version of the Ada Drivers Library and launched the first MakeWithAda competion. I bought an STM32F746 board, played a little with their drivers and I was soon interested in writing an embedded network IPv4 stack to analyse Ethernet packets (this was a part of my work at Bouygues Telecom). EtherScope was born and I won the competion. Since then I participate in the competition in the judging process.
There is more than one feature I really love. To cite one, I'll mention the Ada protected types. Having worked on a lot of multi-threaded C++ applications, the Ada protected type provides the best encapsulation to protect concurrent accesses. Writing safe multi-threaded applications is difficult and I've seen many developers doing things wrong, including me from time to time. Ada protected type prevents a lot of mistakes.
Strings. Too many types to represent a string, you have to choose one between 9 possible types. And in many cases you have to pick two (
Unbounded_String) and then fall in the nightmare of continuously converting a string type into another. Java did it better for that matter.
One string type to rule them all.
Ada is a language for people who think long term. You have to think more about the design of your program. Because Ada defines a lot of constraints this design phase is more complex and can be longer. It does not fit well in our immediate world where you don't want to think but see the thing run immediately. Of course the benefit is the quality of the final program. This is why the language fits well for long term and big projects.
In fact Ada 202X will have many new features that look very promising: parallel loops (AI12-0119-1), Map/Reduce attributes (AI12-0262-1), Bignum packages (AI12-0208-1). To mention one evolution, the new assignment target name described in AI12-0125-3 (
@) is nice to simplify constructs where you want to update a value by doing a computation on them.
My_Package.My_Array(I).Field := My_Package.My_Array(I).Field + 1;
My_Package.My_Array(I).Field := @ + 1;
Now I wish Ada could integrate several features that we see in other languages to simplify the syntax such as:
finallyblock statement similar to that of Java