Is Ada a failed language?
medium.com
medium.com
I'm sorry but this blog post is a really superficial treatment of the subject. How languages rise, fall or command their own little space is a very interesting topic worthy of a better discussion.
My CSC sequence (started 1990) was taught in Ada. I was already writing a lot of Pascal so it was an easy switch. I remember feeling no great love for the compiler and tooling, however.
(0) Identify a concrete class X of programming errors you want to eradicate.
(1) Postulate a mathematical theory of what it means for a program not to have errors of class X.
(2) Develop proof techniques that are powerful enough to establish that “interesting” programs do not have errors of class X.
(3) Design algorithms that use these proof techniques to prove, or at least validate a purported proof, that a program does not have errors of class X. Your algorithm must be able to analyze program fragments (modules, classes, whatever) independently, and combine information obtained from several program fragments without reanalyzing them from scratch.
Ada's failure in the mainstream, besides the compiler prices and hardware requirements of old systems, is lack of support for cowboy programming, so loved by users of languages like C, JavaScript, PHP and other similar ones.
As for cowboy programming, Java and C# don't support it all that well, and they are very popular.
Programming language design is all about interactions with humans and there is no place for so much ignorance of humans as your comment expresses. And don't get me wrong, you can come up with an arbitrary approach to language design that doesn't involve humans, but it can work for humans only by chance.
A programming language designer can only do so much for you. If you cannot identify errors in your programs on your own, consider switching to a different career.
> And what about programming errors that your process and your language causes?
Rigorous reasoning cannot possibly cause any problems. Rigorous reasoning helps identify and fix problems more often than not caused by prior non-rigorous reasoning.
> Programming language design is all about interactions with humans
Humans who need to reason rigorously in order to do things right, hence need to be pushed in this direction.
That is not necessary true when it comes to aerospace and defense projects. In these cases it not important to be ahead and have short delivery times, so here Ada is still suitable.
That the language is a general-purpose programming language does not mean that it is suitable for all application domains. You always need to use your common sense and experience too to choose the right tool for your task.
Sometimes, being first to market is less of a problem than being the first to not to scramble your user's data.
We'll always write bugs.
1. Way fewer bugs in general.
2. Fewer severe bugs that become full-on crashes or hacks.
3. Fewer bugs we cant fail-saif on and/or recover from.
Not all bugs are equal by far. Just see Rust's panics vs C's donate-PC-cycles-to-hackers technique.
I'll totally use that.
I can't come up with such an example.
You're right in that things are rarely black and white, but when it comes specifically to bug prevention, I think Ada is a strict improvement over many alternatives.
http://archive.adaic.com/intro/ada-vs-c/cada_art.pdf
The others from that time period by the military and defense contractors showed something similar. In only one case did I see C++ and Ada tie but why wasnt evident. Note this was before automated proving in SPARK, Design-by-Contract in Ada 2012, and co tract/type/property-based testing tech. The numbers would likely be even higher. Of course, one would want a comparison against tech designed for same things in C which are plentiful now.
There probably is a point where the strictness of the typing starts influencing the bugginess of the code.
They chose to use C++ for the F35, which is buggy as hell, because they thought there were no Ada programmers available. But if you are planning a multi-decade project wouldn't you just... train some yourself?
It's a difficult language, on par with C++. It's tough to learn, even if you already have a decade of C++.
I think it's fair to pick Ada for that kind of project but it is also fair to avoid it. Either decision is justified.
Which used to be quite common before C and C++ got widespread during the mid-90's.
Ada's biggest problem was the price of the compilers, and lack of adoption by OS SDKs, an issue that also pushed other languages outside of mainstream.
Businesses already had to pay for the OS developer tools, unless there were legal requirements on their domain, they weren't keen in buying extra compilers.
Then Windows and Linux became the dominant platforms and they are C only. Everything else died.
What UNIX? Only one I can think of macOS? What other UNIX is a dominant platform? Linux is not a UNIX, but rather UNIX like.
I'm all for UNIX, love the design, love the history, but it is not dominant. To be honest UNIX seems dead, and only live on in *nix-like OS.
One of the reasons why other languages failed? While c/c++ flourished in the oss environment, even with its tooling being sub-par at the time. imo.
C++ was already being adopted by all desktop systems, Mac, OS/2, Windows, even if at lower level it was a mix of Pascal (Mac) and C.
On proprietary UNIX systems, C++ major stronghold was CORBA based applications, while some companies were pushing C++ bindings for Motif.
Then GNU and Linux happened, with FSF suggesting that the best approach to write portable open source should be C, and then we arrived in the present situation.
Most of them are servers, mainframes and embedded devices running some form of UNIX based OS.
If you prefer I can rename it to nix, as I wasn't thinking about POSIX certification.
BSD, Minix (running on your Intel chip), Aix, HP-UX, POSIX layers in IBM and Unisys mainframes, RTOS, NuttX, QNX, and many other POSIX based OSes for embedded deployment.
This makes me sound pedantic, but yes. I understand the world is more then plain desktops. The topic was dominant platforms; UNIX is not.
I'm aware of most of your examples. But all of them are either unix-like or posix complaint.
But as admitted my complaint was a nitpick.
"UNIX is dead; long live *nix." ~ oneweekwonder
Ada is much simpler than C++, the hard part about learning it is the lack of tutorials and general information. That has changed in the last few years, but for the longest time the Ada community would just point to the (freely available!) standards doc to answer all questions.
The spec isn't that useful if one doesn't already know the concepts being explained, making learning the ideas behind Ada not that easy, but fundamentally those ideas are not hard.
The separation of cpp and header files, classes, inheritance, different kinds of inheritance, virtual, pointers, references, pointers of pointers, exceptions, meaningless errors from the compiler, etc...
Personally, I find both languages to be a complete clusterfuck. The difference is that C++ will compile anything and crash for no apparent reason whereas Ada will refuse to compile anything.
Also, the alternative is C++ and C++ developers are not a replaceable commodity either.
https://en.wikipedia.org/wiki/List_of_companies_based_in_the...
In the NY metro area, there are lots of defense contractors on Long Island.
Companies complain when they can't find purple squirrels, even where they could find someone with great general skills in the profession and train them, in about the same amount of time it takes to onboard someone with precisely the skills you want.
Hiring somebody new costs 15-25% of the raw salary cost for the year. Pay people 10% more instead, no incentive to leave.
As a general rule, treat your employees fairly (which includes updating their salaries up to market value, as often as needed) and, lo and behold, they will stay. There is a lot of talk about changing jobs because of a lack of challenge, wanting to try new technologies, etc., but 99% of the time, it's about money (and benefits).
Admittedly, this idea might not be very well received by most companies.
Let's say you get a job offer from a company which the worst case of NIH syndrome you've ever seen, and all their code is written in a programming language that the company created and the only code in the world written in this language is at this company. Even if the company agreed to train you, would you take the job offer?
Chances are, no, because if you were to ever switch jobs in the future, you want to still be employable, and not have invested years and years into a stack that's completely irrelevant to the rest of the world.
So if the company is of such a literally enormous size and permanent standing to be able to make you a believable offer of lifetime employment / tenure for learning their untransferable skills, like a military or other government body, then maybe. For a defense contractor which could go belly up after some upper-management scandal? No way. For anybody else in the private sector? No way.
Either way, it's still problematic because your hiring mechnanics now revolve around unfirable employees, and the easiest way to demotivate employees is by putting them in an environment where mediocrity is accepted because the perpetrators of the mediocrity can't be fired.
Ada's problem is that it was only a defense-sector language, for reasons specified by others in the thread e.g. compiler cost. Ultimately, targeting tooling to only a specific industry is dooming it to failure; the tooling must stay relevant to many companies and industries both so that people will see it as a career-advancing skill and so that the labor market remains fluid.
A counter-example would be Goldman Sachs, with their own language (Slang) and their own database (SecDB), former Goldmanites have no trouble finding work after.
For what it's worth, GS was founded in 1869, which makes it older than most of the behemoth systems companies like IBM (1911) or AT&T (1880). Big banks like GS may not be as invincible post-2008 as they used to appear to be, but if there are institutions which you could say "this institution is not going to evaporate in the next few decades which will make up my career", GS would not be a bad bet.
Which brings an interesting question, how many former Goldmanites a) worked primarily in Slang (given that not all Goldmanite engineers work on SecDB) b) were laid off or otherwise left GS without having a job lined up and c) then found work? If you can prove that you can work on a different stack and get a job with no frictional unemployment, is a much different picture compared to engineers who stay out of work (the parallel question being, why is Slang so much more de-facto employable than COBOL or other languages which for one reason or another are now unpopular or unused in the wider industry?).
Is this really the fault of C++? Ada was appreciated for providing static code analysis out of the box but they found out that coupling C++ with a (modern) static analyzer gave better results.
I'm not saying it necessarily is, but it clearly can be. When you fuck-up language semantics, as pointers in C and C++, making things vague and unspecifiable regarding important properties (aliasing, memory allocation, etc), then you lose something that is extremely hard to get back via static analysis.
For this reason, a language that has safe properties in a domain (like Rust or Ada) will always be safer in that domain, by construction, that a language where you graft static analysis on top of it.
This can be somehow alleviated by coding rules/standards and annotations for static analyzers, but then, you're not programming in the same language anymore, which has its own set of problems.
All that tooling isn't helping produce the software tho' is it?
https://www.theregister.co.uk/2017/01/12/f35_alis_software_d...
And
https://www.theregister.co.uk/2018/03/22/f_35b_block_4_upgra...
For just two examples
The reality is most businesses are rather short sighted and prefer to save on up-front costs. Never mind how bad it can come back to haunt them in the future...
It seems to me in both cases you'll still need to test your code thoroughly, so not an easy question to answer.
Still looking forward to the day refunds and other kinds of legal actions actually start to change this mentality in software companies.
I don't buy incomplete pair of shoes, half-baked bread, car without seats, ...
Is it the latest and coolest language? No. It can't be - it was already solving real problems since well before the people who wrote the latest and greatest languages were born.
I have special fondness of it as well, but my second year my college switched to Java, as they saw it gave more job opportunities to students after graduation.
ADA was only used from defense contractors, DOD and perhaps Nasa, and that's why it ultimately failed. It "strictness" is a good thing to have when writing the code for a Tomahawk misle, but not so much when trying to do rapid development.
Also, traditional Ada is more of a procedural/imperative language, and not OOP, and the world had moved into OOP by the late 90s.
I wound up unemployed in 2008 and took a job maintaining an old system written in Ada95. My mother (who is still a working software engineer) was kind enough to give me all of her old Ada books. In the 80s, during the big initial push for Ada by the DoD, defense contractors actually sent a lot of their programmers to training courses (my mother was sent to training courses on both C and Ada in the early years of her career). Today, they would just layoff all of their "obsolete" engineers and hire new ones.
Ok, you got me. I have no idea what that means.
Me too. It wasn't at the University of Washington by any chance?
There was a time when it was not free but it was a very very long time ago.
At this stage in history, the internet didn't exist and it was commonplace to pay for the shipping of a floppy or a CD. I don't know the price tag but it may or may not be considered free by today's standard.
Lets pick the BYTE magazine in 1994.
- IBM C Set++ for OS/2, $249
- Powerbuilder, $249
- Watchom C/C++, $450
This on top of a PC that would cost around $1000.
Mac Quadras started at $1199.
Ada required UNIX or VAX stations.
Cheapest SparcStation on the same magazine $3995, plus OS SDK and the Ada compiler as additional expense.
So lots of zeros versus the alternatives.
Sure, for hobbyists and such. But if you're a "real" company and you are paying software people perhaps $50,000 (at the time) plus benefits, why would the cost of a workstation and a compiler make much of a difference?
Only companies at Fortune XXXX level would even think about renting UNIX/VAX systems.
Then the OS SDKs only contained the systems language compilers, C, BLISS, Macro32, CLI tools and such. Every other additional language was an extra purchase.
That's also why Smalltalk failed to gain traction. I suppose both languages hailed from an era in which employers did still provide training - say up to the late 80s, maybe even early 90s. The idea that programmers would need to learn languages on their own time/dime never even occurred to those vendors.
Is this actually true any more (if it ever was)? Yes, I do know that Google is picky about it, but is this really still widespread?
> Both the compiler and the majority of libraries are infected by it.
Why the flame-worthy language "infected"? Royalty-bearing libraries are just as "infected", as corporate IP policy needs to track shipments in order to make payments.
(I do agree it is unfortunate that GNU Ada's library is GPLed.)
Yes, of course, there must be some niche somewhere which still contains people who care about Ada, just as there are little pocket communities who still care about MUMPS, APL, and other bits of exotica, or we wouldn't have articles like this one trickling out every few years - but out here where the action is, nobody knows anything about Ada and nobody really cares.
What's wrong with the GPL?
Two companies that didn't do that were Microsoft, Borland. AT&T was forbidden from selling products outside of Telcom. Which is why Linux and C/C++ succeeded. C succeeded because a competent grad student could port the language to a new computer in a two months.
So you could use Microsofts Basic and C/C++ compilers, Borlands Pascal and C/C++ compilers, or gcc/etc C compilers without the them sharing ownership of your compiled binaries.
[1] Per unit licensing fees. Meaning instead of just charging you a seat license, they wanted a cut of your profit as well. You pay use $20 for every license you sell. I'm not kidding about $20 either.
with Text_IO;
use Text_IO;
procedure Hello is
begin
Put_Line("Hello, World!");
end Hello;
I subscribe firmly to the school of thought that as programmers, we are not optimizing for keystrokes... but man oh man having to type capital-Put underscore capital-Line instead of just print or printf, 50 times a day. Yikes.Ada always used IDEs, which already supported automatic formatting back in the early 90's.
Rational started their business selling Ada Machines, just like the Lisp ones, but using Ada instead.
https://en.wikipedia.org/wiki/GNAT_Modified_General_Public_L...
Why do developers do this?! These are the sorts of policies that scare companies away from open source software.
http://www.youtube.com/watch?v=0yXwnk8Cr0c
I do not understand the Medium authors definition of "success". I get similarly confused when web commentators use the term "won" (e.g., language X "won") when discussing programming languages. Won what?
IMO, the presenter (RIP) was quite successful. Im sure Ada "won" many contracts.
See: Java wining enterprise programming; Python winning DevOps scripting; FORTRAN wining numerical simulation way back.
Also see: PHP winning SMB web consulting in the 90s (resulting in e.g. the Wordpress plugin ecosystem); RoR winning SMB web consulting in the 00s (resulting in the the current “horizontally scale by running more containers with a load-balancer in front” approach to web-app deployment, due mostly to Ruby’s horrible concurrency story at the time); Node.js winning SMB web consulting in the [first half of the] 10s (resulting in the rise of websocket-driven SPAs and a million Node build tools.)
Maybe "hyped" success is sometimes confused with "real" success. The later type may not always be as visible.
He addresses this in the lecture. He suggests people often make statements about programming language usage in industry without actual knowledge of what some organizations are really using (beyond what is announced publicly, or hyped).
i’m starting to realize the only industry more fashion conscious than software is... well fashion!
Ada?! ahahahaah
Ever heard of PL/SQL? Same thing.
Oracle ripped the entire ADA language into their database.
IBM DB2 clones most of it, courtesy of EnterpriseDB (Postgres bolt-on).
People forget this enormous ADA audience.
There is "successful" and there is "widely used because corporate mandated it".
edit: OK, I was being cruel. People use it and it solves problems, but it's NOT a joy to use.
Yes, some legacy applications do some really nasty things in database procedures - but that doesn’t make the tools themselves bad.
I will always favour PL/SQL and the related tooling over SQL Server, DB 2, Informix, PostegreSQL languages.
I always treated PL/SQL as a necessary evil for performing specialized atomic operations, or merges, or other such things where SQL wasn't enough. I never enjoyed it, but I had to do it.
I'm very tempted to see about taking something like this, https://github.com/thehydroimpulse/postgres-extension.rs, and using a language I actually like. That example needs to be updated, but seems pretty straight-forward.
Edit:
It would be amazing to have a rich library in Rust that could be using to write DB extensions as a replacement for pgsql, etc. There aren't that many things that need to be wrapped in the API from Postgres: https://www.postgresql.org/docs/10/static/xfunc-c.htm
Never was into a project where the overhead of writing DB independent code was worthwhile. Usually moving to another DB meant rewriting big portions of the application anyway.
Stored procedures are also a good escape hatch for some of the ORM limitations regarding SQL capabilities.
The repo I linked to is for C based extensions added to Postgres but written in Rust, that could replace pgsql for stored procedures.
Hence why Perl, Java, .NET as stored procedures have been a failure to SQL extensions.
PL/SQL used Ada as a model for the syntax. The semantics is completely different. Just like JavaScript is not C, PL/SQL is not Ada in any meaningful way.
C has unions. Show me the unions in JavaScript.
Unions are there because C is a systems language. Show me a kernel written in JavaScript.
Lots of languages have those. That doesn't mean one copied the other. Are you serious?
Army Secure OS (A1-class design)
http://www.dtic.mil/dtic/tr/fulltext/u2/a340370.pdf
Fault-Tolerant, Parallel, Mainfraim-style OS/Platform
https://en.m.wikipedia.org/wiki/BiiN
MarteOS Real-Time OS
Muen Separation Kernel
Then why is PL/SQL internally littered with references to DIANA, aka Descriptive Intermediate Attributed Notation for Ada?