Hacker Newsnew | past | comments | ask | show | jobs | submit | GhosT078's commentslogin

And despite all that complexity, you make it work very well (I've used GNAT since about 2002).


I agree. I've never understood or accepted the claim that Ada is verbose. It's simply clear and expressive. If there were some alternative concise syntax for "Ada" then I would not want to use it (because it would not be Ada).

This was proposed, as a joke, some years ago: https://www.adacore.com/blog/a-modern-syntax-for-ada

This is an old but good article on the topic: https://www.embedded.com/expressive-vs-permissive-languages-... Note that SPARK has changed significantly since this was written.


Because that is a joke, it proposes replacements only for a small set of Ada tokens and it is not clear how the proposal can be cleanly extended to the full set of Ada tokens.

Nevertheless in is possible to define a complete 1 to 1 mapping of all Ada syntactic tokens to a different set of tokens.

The resulting language will have exactly the same abstract syntax as Ada, so it is definitely exactly the same language, only with a different appearance.

For a seasoned Ada programmer, changing the appearance of the language may be repugnant, but for a newbie there may be no difference between two alternative sets of tokens, especially when the programmers are not native English speakers, so they do not feel any particular loyalty to words like "begin" and "loop", so they may not feel any advantage of using them instead of using some kind of brackets that would replace them.


I think there is a significant difference between choosing to use words (from some language) versus using brackets like {}, () and []. With nested brackets there are often debates over placement and it is usually less clear what scope is being ended by the closing bracket.


Indeed, the fact that is not clear what scope is being ended by the closing bracket is very serious.

This is why much more bracket pairs are needed in a programming language than the 3 pairs provided by ASCII.

Ada uses many pairs of brackets, but most of them are implemented with keywords, for instance if => end if, loop => end loop, and so on.

These long keyword-based brackets can be replaced with various Unicode bracket pairs that are graphically distinct.

Such brackets, for instance angle brackets instead of "if"/"end if", take much less space and they are also much more salient than keywords, which for me improves a lot the readability of the text.

Even if you do not know before that how the brackets are assigned, by reading the text you can discover very quickly the correspondence, because you can recognize what kind of structure is started by a certain kind of bracket, and then you know that when you will see a closing bracket of the same shape that is the end of the structure.


I have been using GNAT Studio (previously GNAT Programming Studio or GPS) on Linux for the last 15 years.


I didn't think these were hard to find:

https://ada-lang.io/

https://alire.ada.dev/


An interesting, although incomplete, list.


Ada does. It has been through 5 editions so far and backwards compatibility is always maintained except for some small things that are documented and usually easy to update.


I'd normally be inclined to agree that minor things are probably good enough, but "absolute non-negotiable" is a rather strong wording and i think small things technically violate a facial reading, at least.

On the other hand, I did find what I think are the relevant docs [0] while looking more into things, so I got to learn something!

[0]: https://docs.adacore.com/gnat_rm-docs/html/gnat_rm/gnat_rm/c...


> except for some small things that are documented

I can't think of any established language that doesn't fit that exact criteria.

The last major language breakage I'm aware of was either the .Net 2 to 3 or Python 2 to 3 changes (not sure which came first). Otherwise, pretty much every language that makes a break will make it in a small fashion that's well documented.


Look to Ada for “headers” (i.e. specs) done right.


Recently became big Ada fanboy, ironic because Im far more a fan of minimal, succinct syntax like lisp, forth, etc and I actually successfully lobbied a professor in 1993 to _not_ use it in an undergrad software engineering class lol.

Still in the honeymoon phase granted, but I'm actually terrified that we have these new defense tech startups have no clue about Ada collectively.

Your startup MVP you wants to ship a SaaS product ASAP and iterate? Sure, grab Python or JS and whatever shitstorm of libraries you want to wrestle with.

Want to play God and write code that kills?

Total category error.

The fact that I'm sure there are at least a few of these defense tech startups yolo'ing our future away with vibe coded commits when writing code that... let's not mince our words... takes human life... prob says about how far we've fallen from "engineering".


IBM is where good (acquired) software goes to die. RIP Clearcase.


good? That POS is the one SW that 100% deserves it place in hell


Yes it really was quite good despite all the hate it seems to get in internet comments. I used it for several years. The feature set, particularly config specs and dynamic views, was brilliant. The product was pretty mature and complete 25 years ago. I agree that administration was complicated and performance could be slow if misconfigured. We configured right, it was very intuitive and pleasant to use. IBM has effectively killed it by continuing to charge an excessive premium while adding nothing significant since they bought Rational (for Clearcase, DOORS, Apex etc.)


In my timeline, something 10x better than Rust came along in 1995.


Java? Delphi? Better at what?


Ada


Would you mind elaborating…?


Sane, easily readable syntax and expressive semantics. Easy to learn. Very scalable. Suitability, by design, for low level systems programming, including microcontrollers. Suitability, by design, for large, complex real-time applications. Easy to interface with C and other languages. Available as part of GCC. Stable and ongoing language evolution.


Manual memory management for anything beyond RAII.


I’d guess that’s a reference to Ada 95.


Yes


SPARK is a very expressive language for implementing cryptographic applications. It is available for some LLVM targets (e.g. x86-64).


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: