top | item 8735094

Who's Using Ada? Real-World Projects Powered by the Ada Programming Language

115 points| dodders | 11 years ago |seas.gwu.edu | reply

73 comments

order
[+] acomjean|11 years ago|reply
A lot of radar systems run on Ada. Its takes a little getting used to, but its a good language.

Ada has a c binding package so it can call down to the OS libraries (networking, shared memory), which is great, but kills some of the niceness of living in an ada world.

When I was trying out GO, I got a little ada flashback for some reason.

The package system was good.

I disliked ada strings though.

When I left the industry, they were looking for alernative languages for new projects. GCC Ada compiler was being considered for maintaining older projects, seemed decent. http://libre.adacore.com/tools/gnat-gpl-edition/

[+] thejteam|11 years ago|reply
Although I've never coded in Ada I have had to read existing code to figure out what it was doing.

Ada struck me as a language that would be a pain to write in(at least it would take a long time) but it was a pleasure to read. Even without an intimate knowledge of the language (I was a C++ guy) I was able to figure it out.

[+] nabla9|11 years ago|reply
Alternative to Ada is often writing Ada in some other language more painfully :( I think it's sad that companies move to restricted C/C++ subset just because there are more people with C/C++ in their resume.

1. The JSF air vehicle C++ coding standards http://www.stroustrup.com/JSF-AV-rules.pdf

2. MISRA-C:2004 Guidelines for the use of the C language in critical systems http://caxapa.ru/thumbs/468328/misra-c-2004.pdf

3. MISRA C++:2008 Guidelines for the use of the C++ language in critical systems http://frey.notk.org/books/MISRA-Cpp-2008.pdf

[+] nraynaud|11 years ago|reply
it's verbose, but I guess a good IDE would write a lot for you anyways. When it's statically typed the IDE can help you a lot. It touches the difference between what you want to read and what you want to write in software, but nowadays, stuff doesn't have to be written, it can be conveyed with color, font, underline etc.

But the real shocker is that you can't really write serious Ada for free, gnat is a pain, the free toolchain is a joke. My understanding is that there are good expensive private compilers out there. A few month back, I drank the cool aid and started a project in Ada, and the tools were a pain. The 'real time' system was ticking at a constant 1kHz. And making it tickless was looking tricky for a beginner. The formatting tool was bugging without an error message, the cross compilation toolchain for ARM is a pain, etc.

[+] TomMasz|11 years ago|reply
I took a course on it in the 80s when I worked for a government contractor. It was fussier than Pascal but once you got it to compile, the resulting code was pretty good. I imagine that over time you'd just adapt to the environment and not even notice it unless you also coded in other languages.
[+] arthursilva|11 years ago|reply
Ada is a language that deserves more love.
[+] marxama|11 years ago|reply
I got to use it a bit in a Real-Time Systems course I took recently. I wasn't too excited about it starting out, it didn't initially feel like much more than a different C. As I've been spending some time with Clojure's core.async, I was really pleasantly surprised when I came to realize that it offered a really nice CSP implementation! Didn't go much further than that, but seems like a nice language that I wouldn't mind using more.
[+] agumonkey|11 years ago|reply
Beside being intimidating and having few syntax curiosity (' as string index operator) it really is a nice language.
[+] reledi|11 years ago|reply
I would have enjoyed seeing a list like this in university where we had the option to learn Ada for a software engineering course.

Ada was mandated to be used for military applications but became largely irrelevant for commercial applications. It's now considered a white elephant [1] by many.

1: http://en.wikipedia.org/wiki/White_elephant

[+] krylon|11 years ago|reply
To my knowledge, Ada is used in embedded/realtime systems where reliablity is of the utmost importance. The European Ariane rockets have code written in Ada on board, I think (these are civilian rockets, not military). There is a subset of Ada called Spark that allows - to a degree - automated verification of code.

Not saying I like it or anything like that, but it definitely has its place.

[+] kevin_thibedeau|11 years ago|reply
The attribute mechanism is something a lot of languages would benefit from. Need to know the maximum value of an integer? Just ask the integer type to tell you. No going to a library to look up inscrutable constants.
[+] kazagistar|11 years ago|reply
In Haskell, you have typeclass values. In other words, generic values.

    class Bounded a where
        minValue, maxValue :: a
So it is always the same constant, and it just changes value by what its type context is.
[+] cjensen|11 years ago|reply
C++:

  numeric_limits<type>::max ()
[+] jmnicolas|11 years ago|reply
In C# you have Int32.MaxValue. I always assumed it was pretty standard everywhere.

Btw, Ada is on my list of languages to learn since 2011. I guess I will put it first on the 2015 good resolutions list :-)

[+] bglazer|11 years ago|reply
This is certainly an impressive list of projects. Ada seems to be favored for critical software that can't ever fail. I've been considering how to achieve this type of software reliability for more "enterprisey" applications. Formally verifiable languages are certainly intriguing, but would be a hard sell for the managers at the Fortune 100 company where I work.

Reading the wikipedia page for Ada didn't really give much insight into why the language is so heavily favored for applications like avionics software. Built in task based concurrency is certainly nice, but not a game-changer. Can someone more familiar with Ada explain what makes it so popular for high reliability applications?

Or is it a question of culture and tooling rather than the language itself?

[+] acomjean|11 years ago|reply
It has a lot of safety checks built into the runtime, which make it a little slower.

x is and int between 1 and 200.

x gets asigned out of that range, exception is thrown. So we weren't manually checking everything.

Also I think it was mandated as a language for US government contracts, for a variety of reasons.

[+] tormeh|11 years ago|reply
Like C, it's been around forever and is considered battle-proven and figured-out. Unlike C it has real-time features and a type system that isn't trying to kill you.

Also the syntax is designed to be as easy to understand as possible, typing out every word and using no three-letter abbreviations.

It's in general a language that was way ahead of its time, but survived because the DoD mandated it. Its main competitor is C, but that's mostly because the amount of engineers who know Ada out of school is really low, which is a shame, I think. Rust is way too new and Haskell has GC.

[+] HeyLaughingBoy|11 years ago|reply
Or is it a question of culture and tooling rather than the language itself?

Pretty much. I write software for Medical Devices and culture and process is what it boils down to. Tooling helps. We use C, C++, C# among other languages. Language makes a little difference in reliability, but not much.

What matters in a nutshell: Know what you're building: need good Requirements

Analyze those Requirements for correctness, clarity and uniqueness (no conflicts)

Make sure your design meets all the Requirements and doesn't add anything: if you add a feature not in a Requirement, how will the testers know it's there? Verify the design: i.e., does it do what you need and does it do it "well." Does it barely function, or will it handle what you expect to be thrown at it or fail gracefully? Separate the concerns: e.g., need to be sure that the temperature is correct? The temperature control code and the temperature verification code should be decoupled from each other.

Code: probably where language makes the most difference, although different languages will influence your design.

Verify all design artifacts: review your Requirements, Designs, and all Code against predetermined quality standards. Reject anything that doesn't meet the standard. Build what you planned to build, and document what you built. Most errors will stem from Requirements problems.

That's Software Quality in a tiny nutshell ;-)

[+] circlefavshape|11 years ago|reply
I used Ada on my first coding job - test scripts for Airbus engines back in the mid-90s. Nice to see they're still using Ada, though tbh I don't remember a single thing about the language except for you can't dynamically create objects
[+] baldgeek|11 years ago|reply
Ada used to be basis for CS Curriculm at Cal Poly Pomona (Circa '92- '98). Ada teaches good practice. One prominent feature is that there is no implicit casting; Add a float and int, you get a compile error. It's good to know that you have to do exactly what you want and the compiler enforces this.
[+] imgabe|11 years ago|reply
Wow, I went to GW and learned Ada in CS051. I didn't have much of a point of reference at the time to compare it to other languages, but it was pretty easy to learn and I enjoyed the class.
[+] ahi|11 years ago|reply
I am class of 05 so my intro class was the last one to use ada. I also remember it being very easy on beginners. At the time I was annoyed the underclassmen got java, but now that I know java, no thank you.
[+] meej|11 years ago|reply
Nice list. I programmed in Ada for eight months in 1997 when I was on a co-op at Rockwell Collins, working on their simulation testbed for their general aviation flight management systems -- I recognize several of the planes listed in the Commercial Aviation section.

I ended up really enjoying programming in Ada and was unhappy about having to return to C++ when I went back to school that fall. It was a bit more work to write, but it was easy to read and when it compiled it usually did what you expected it to. It's a language that makes it difficult for you to shoot yourself in the foot.

[+] zerr|11 years ago|reply
I'd love to hear about remote Ada jobs, and not requiring US citizenship...
[+] bitwize|11 years ago|reply
Europe loves it some Ada in the avionics space.
[+] okatsu|11 years ago|reply
As a college student, is Ada still worth learning for (Canadian) development jobs in critical systems? I'd like to think it would give me an edge coming out of school, but I keep reading that new applications are being written in C/C++.

Edit: In fact, I interned at an avionics company and they're slowly trying to entirely switch to model-based development, using certified software that generates the code for you.

[+] Igglyboo|11 years ago|reply
Ada is still extremely popular in mission critical software. I know the US military and NASA use it a lot.
[+] dugmartin|11 years ago|reply
We used Ada in my software engineering class in 1992 to try to build a system to do route finding on a map and then generate directions. Each build took 40 to 50 minutes on a pretty nice PC at the time. I don't miss those days.
[+] tormeh|11 years ago|reply
Wrong tool for the job. I would do that in Python.
[+] foogered|11 years ago|reply
I used Ada during my first internship (avionics software). However, the group I was part of was in the middle of phasing out Ada in favor of C/C++. This was around 2010-2012.
[+] anderspitman|11 years ago|reply
Similar for me. My first ever programming assignment for a real company was converting an Ada project to C for the Boeing 787.
[+] callmeed|11 years ago|reply
Ada was my first language in college. At JC, our professors were DoD contractors at the nearby Air Force Base. Good times.
[+] mtimjones|11 years ago|reply
I worked on two geosynchronous communication satellites built on Ada (late 1980s using the TLD compiler). Both had a maximum of 48KB of ROM and 16KB of RAM. That included attitude control, command, telemetry, thermal/power management, fault manager, and little OS.

Since then, I've done pretty much nothing but C, but I do miss Ada's features from time to time.