It's ok, but not more than that. I dabbled a bit in Ada, and while that link has a lot of information, it's far from complete. Unfortunately, there isn't much more information on the internet. It can be difficult to find answers.
I also learned a bit of SPARK, and there the situation is much worse. The Adacore link shows less than the bare minimum: I couldn't get my simple programs (AoC) to the "silver" level, where it passes all checks, let alone "gold", where you actually prove correctness. The rest of the internet is practically barren when you search for SPARK. I got a second-hand copy of Building High Integrity Applications with SPARK; John W. McCormick, Peter C. Chapin. It contains complete examples, and explains the concepts pretty much in depth. Unfortunately, the book is expensive, and since I was just dabbling, I got the cheapest, which was the 2015 edition, which lacks later changes.
There's an Ada forum (https://forum.ada-lang.io/), but it is not very active, and questions may not be answered.
My understanding is that most of Adas users are maintaining legacy systems.
It'd be great to hear from anyone who is using it today by choice.
Linux-Fan 1 days ago [-]
After some search for programming languages which promise to reduce the number of bugs, I decided to give Ada (2012) a try.
I like it better than C and C++ and the compiler is included in Debian in a reasonably recent version that it can compile the code that I need.
Ada is particularly nice for programming RPI 2040 microcontrollers because for my needs I didn't need additional libraries. For both of my RPI 2040 projects (one of which is online here: https://masysma.net/37/dcf77_vfd_raspi_clock.xhtml), my code had fewer bugs than I had anticipated.
For general purpose systems programming the lack of free software libraries is still a concern e.g. while working on a custom backup restore program I had to write my own LZ4 extractor and Blake3 hash function implementation because there wasn't any existing libraries that I could find for the purpose.
kqr 17 hours ago [-]
In my experience it is trivial to call out to C libraries from Ada. You run a tool to convert the header file to Ada syntax, you link in the C library, and then you call the C code as if it were Ada code.
That's probably why you don't find LZ4 and Blake3 libraries. You forgot to look for the C libraries, which many Ada users would use.
jmccaf 1 days ago [-]
My workplace uses Ada SPARK for high-integrity automotive software, ported from C or C++.
IIUC, the contracts and static proofs can replace some activities like isolated unit tests for C++ .
I use Ada for a lot of projects where C would otherwise be the default language of choice. I find that I spend much less time getting tied up debugging silly errors. In a lot of cases, Ada makes it difficult to do things the wrong way. When I move from working in C to Ada, there isn't much I miss, but when I move the other way around, I feel like I'm missing so much!
pjmlp 15 hours ago [-]
There is enough business to keep 7 compiler vendors in business, those customers that actually pay for compilers.
I can provide the list, in case you don't find it from previous comments.
Also NVidia rather use Ada/SPARK instead of Rust for their automotive systems.
RavSS 19 hours ago [-]
I've used it in my personal hobby projects for several years now, Ada/SPARK is a favourite language of mine. It's not a legacy language and it has features which I wish mainstream languages would have, particularly regarding the formal verification utilities of SPARK. It's also great for bare metal development.
I've not managed to convince anyone else to use it, as most are discouraged by either its Pascal-style "verbose" syntax on first glance or its general lack of third-party libraries (relative to something like Rust's ecosystem). Anyone who can get past those aspects should really give it a try.
adrian_b 12 hours ago [-]
The abstract syntax of Ada is in many cases superior to that of the C-derived languages, but I also dislike its verbosity.
At least for personal projects, the verbosity can easily be avoided by using a preprocessor for the Ada source files. This is what I do.
Unfortunately, this would seldom be considered acceptable in a business context, because the non-standard appearance of the language would be considered an obstacle for developers unfamiliar with it, so it would complicate the future maintenance of a project.
It would have been nice if one of the revisions of the Ada language would have provided a standard set of abbreviations, e.g. for using various kinds of Unicode bracket symbols instead of the keywords currently used for this purpose.
There would have been nothing unusual in this. In the past many programming languages have defined alternative representations for the tokens, both a verbose representation and an abbreviated representation that may use more symbols, for instance PL/I and ALGOL 68.
gte525u 22 hours ago [-]
We used it for a new Defense/Aerospace projects. Language-wise it's fine although verbose. Intent was to separate similar IP so there was no claim of cross contamination. Built-in threading and a robust standard library is nice.
Tool-wise - refactoring was a bit of a pain.
ajxs 20 hours ago [-]
> Tool-wise - refactoring was a bit of a pain.
Could you share what tools you were using, and what you felt was missing?
I write Ada in vscode, because it's what I use in my dayjob. AdaCore's plugin has good language support^1, but I don't use it for much other than formatting, or expect sophisticated automated refactoring functionality from it.
^1: It's still missing support for some Ada202x features. I can't wait for it to support `return when...`.
docandrew 20 hours ago [-]
I use it for many of my side projects. I just like the language, the strong typing fits well with my work.
metalliqaz 1 days ago [-]
The Ada stronghold is aerospace and defense systems. So these may or may not be legacy systems, but they are safety-critical or mission-critical systems that rely on long standing well defined development processes. That inflexibility means that advancements in the technology are very slow to creep into usage. That goes not only for the languages/compilers but also the silicon and everything in between.
krior 1 days ago [-]
The same can be said for Cobol and its relarionship with banking, but you will struggle to find anyone not categorizing cobol as legacy.
Nowadays everyone is moving into natural language programming, writing even longer prompts than COBOL applications.
jibal 23 hours ago [-]
That's quite the non sequitur. The relationship you mention isn't why COBOL is legacy.
metalliqaz 1 days ago [-]
I'm not in banking so I don't know if banks write new business logic with Cobol or merely maintain existing systems. I would be very surprised, though, if modern web-based products are using Cobol, or fancy high-speed trading platforms, or big data-driven machine learning, etc.
I should give Ada a try and build something fun with both of them
One thing that document doesn't mention is alire, which is a rather complete tooling. If you want to try out ada, check out https://docs.adacore.com/live/wave/alire/html/alire/index.ht...
I also learned a bit of SPARK, and there the situation is much worse. The Adacore link shows less than the bare minimum: I couldn't get my simple programs (AoC) to the "silver" level, where it passes all checks, let alone "gold", where you actually prove correctness. The rest of the internet is practically barren when you search for SPARK. I got a second-hand copy of Building High Integrity Applications with SPARK; John W. McCormick, Peter C. Chapin. It contains complete examples, and explains the concepts pretty much in depth. Unfortunately, the book is expensive, and since I was just dabbling, I got the cheapest, which was the 2015 edition, which lacks later changes.
There's an Ada forum (https://forum.ada-lang.io/), but it is not very active, and questions may not be answered.
It'd be great to hear from anyone who is using it today by choice.
I like it better than C and C++ and the compiler is included in Debian in a reasonably recent version that it can compile the code that I need.
Ada is particularly nice for programming RPI 2040 microcontrollers because for my needs I didn't need additional libraries. For both of my RPI 2040 projects (one of which is online here: https://masysma.net/37/dcf77_vfd_raspi_clock.xhtml), my code had fewer bugs than I had anticipated.
For general purpose systems programming the lack of free software libraries is still a concern e.g. while working on a custom backup restore program I had to write my own LZ4 extractor and Blake3 hash function implementation because there wasn't any existing libraries that I could find for the purpose.
That's probably why you don't find LZ4 and Blake3 libraries. You forgot to look for the C libraries, which many Ada users would use.
https://www.wevolver.com/article/nvidia-adoption-of-spark-us...
I can provide the list, in case you don't find it from previous comments.
Also NVidia rather use Ada/SPARK instead of Rust for their automotive systems.
I've not managed to convince anyone else to use it, as most are discouraged by either its Pascal-style "verbose" syntax on first glance or its general lack of third-party libraries (relative to something like Rust's ecosystem). Anyone who can get past those aspects should really give it a try.
At least for personal projects, the verbosity can easily be avoided by using a preprocessor for the Ada source files. This is what I do.
Unfortunately, this would seldom be considered acceptable in a business context, because the non-standard appearance of the language would be considered an obstacle for developers unfamiliar with it, so it would complicate the future maintenance of a project.
It would have been nice if one of the revisions of the Ada language would have provided a standard set of abbreviations, e.g. for using various kinds of Unicode bracket symbols instead of the keywords currently used for this purpose.
There would have been nothing unusual in this. In the past many programming languages have defined alternative representations for the tokens, both a verbose representation and an abbreviated representation that may use more symbols, for instance PL/I and ALGOL 68.
Tool-wise - refactoring was a bit of a pain.
Could you share what tools you were using, and what you felt was missing? I write Ada in vscode, because it's what I use in my dayjob. AdaCore's plugin has good language support^1, but I don't use it for much other than formatting, or expect sophisticated automated refactoring functionality from it.
^1: It's still missing support for some Ada202x features. I can't wait for it to support `return when...`.
https://www.rocketsoftware.com/en-us/products/cobol/visual-c...
Latest standard is from 2023.
Nowadays everyone is moving into natural language programming, writing even longer prompts than COBOL applications.
https://www.rocketsoftware.com/en-us/products/cobol/visual-c...
https://cobolcloud.io/
https://www.ibm.com/products/watsonx-code-assistant-z
https://youtu.be/zL9vVs5vHuQ?si=-thG-FkelkW6oFfb