Learning resources

Hi All,
I am interested in learning Ada. I am basically java developer working on web technologies-springboot etc. I saw there are couple of books on Ada but confused from where to start.
What i am looking for is

  1. IDE(i know GNAT studio community edition) and book to begin.
  2. Should i go for Ada-95 or Ada-2012?
    3)Are there any Ada courses(like on Udemy/Udacity etc) to begin with?

Hi, and welcome.

  • 1 : There are mainly GNAT studio and VSCode with Ada plugin as IDE/editors but other solutions exist. There are books of course but you can also learn Ada online here.
  • 2 : The last standard is Ada 2022 but compilers do not implement all the new features. I’d recommend to use Ada 2012.
  • 3 : See point 1
1 Like

Thanks alot.
One more question- I see Ada mainly in Avionics/space domain. Any other domains where Ada being used? Web applications?cloud?

Have a look at Ada language and you’ll understand it can be used almost everywhere. This is a modern language.
What is limiting it’s use it the lack of big “libraries” like in some other languages. However, it is quite easy to interface to C libraries from Ada.
The Alire framework helps a lot to reuse Ada packages written by other devs.

1 Like

Ada is used in military, space, train systems, medical, financial and various other systems. It’s a general purpose language so it can be used in almost any application area. As far as web goes, there are some existing services like Ada Web Service (AWS…not to confuse with amazon). I’ve personally been using the Gnoga library for years now for web based solutions and even GUI in browser projects, so I recommend that, but there are other options.

1 Like

For those with experience in other languages, I recommend Ada Distilled. There is a free version for ISO/IEC 8652:2007 Ada and a version for Ada-12 from Amazon. I would recommend the Ada-12 version, but you could use the free version and learn the new features without much trouble.

1 Like

We use it for Warehouse Automation.
Communicating with mechanical devices like shuttles, cranes and conveyors,
and to WMS/ERP systems receiving orders. The largest and most complicated part is about flow-management. How to distribute assignments to the devices in a way that is the most efficient way - not only physically, but bringing the goods belonging to the same shipment/customer/pickstation etc. Sorting is always enemy to speed.
The flow-management is the part with most custom adaptions. Every site has its of physical layout and combination of machines.

1 Like

Out of interest. Do you use the stdlib packages for sorting or others?

I think you misunderstood the ‘Sorting is the enemy of speed’ statement.
(it is a saying in our business, and I guess I should have clearified it)
It is about how to bring goods out to say a pick-station, not how fast the actual sorting takes. (We are not a real time system, 100s of ms is usually ok)

If you want pick-from-pallets/boxes sorted after some criteria going to the pick station, you will pay by lower speed. If you have 5 cranes, and you want 10 boxes sorted, you must hold 9 boxes until it passed a point whereafter it cannot be overturned. Usually there is a conveyor system in front of (perpendicular to) the cranes, so that point is after the last crane. But if you don’t care, or can sort in a buffer in front of the station - you can let all 10 go at the same time, and see them run in parallel.

So, usually we have this sort order on the assignment of the box, and that is in a database. So mostly we use sql ‘order by’ to get candidates - and then we look at crane utilization if we can choose between many assignments. Many may have same priority.

But that sql is usually read into

  • a home brew list package which predates Ada.Containers by 15 years
  • Ada.Containers.double_linked_list since it is easy to use

I fully understand that there are better - more efficient - ways but

  • simplicity is king in a complex system
  • Many people read the code. And not all are Ada gurus. Actually none are.

We find that the language is

  • easy to read
  • easy to write
  • easy to maintain



Cool. You might find that your list package is useful to SPARK users if it predates protected objects.