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/
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.
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.
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.
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.
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.
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.
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.
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.
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?
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
[+] [-] acomjean|11 years ago|reply
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/
[+] [-] zild3d|11 years ago|reply
http://en.wikipedia.org/wiki/Aegis_Combat_System
[+] [-] thejteam|11 years ago|reply
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
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
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
[+] [-] arthursilva|11 years ago|reply
[+] [-] marxama|11 years ago|reply
[+] [-] agumonkey|11 years ago|reply
[+] [-] reledi|11 years ago|reply
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
Not saying I like it or anything like that, but it definitely has its place.
[+] [-] sushdb|11 years ago|reply
[+] [-] kevin_thibedeau|11 years ago|reply
[+] [-] kazagistar|11 years ago|reply
[+] [-] cjensen|11 years ago|reply
[+] [-] jmnicolas|11 years ago|reply
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
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
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
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
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
[+] [-] baldgeek|11 years ago|reply
[+] [-] imgabe|11 years ago|reply
[+] [-] ahi|11 years ago|reply
[+] [-] meej|11 years ago|reply
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
[+] [-] bitwize|11 years ago|reply
[+] [-] okatsu|11 years ago|reply
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
[+] [-] dugmartin|11 years ago|reply
[+] [-] tormeh|11 years ago|reply
[+] [-] foogered|11 years ago|reply
[+] [-] anderspitman|11 years ago|reply
[+] [-] callmeed|11 years ago|reply
[+] [-] mtimjones|11 years ago|reply
Since then, I've done pretty much nothing but C, but I do miss Ada's features from time to time.