Making a game in Ada with Raylib

I just saw this email of the stream today This Language is the Future of GameDev, don’t know if he’s joking or not.

You never know with him. That allows him to say one thing and the contrary without blinking. No problem, 1) it’s recreational programming after all, and 2) better people talking about Ada be it negative or positive, than not at all.

2 Likes

He is using Emacs now. When did he change, and what Ada mode is he using?

I just opened an issue for him to inform him of @, I tried searching to find the name, that was impossible to find.

He changed back to emacs about 10 episodes back I think.

In Ada 2022, @ was introduced as the “target name” symbol.

“@, known as the target name of an assignment statement, provides an abbreviation to avoid repetition of potentially long names in assignment statements.”

http://www.ada-auth.org/standards/22aarm/html/aa-5-2-1.html

Okay, he did a few more videos after the finale, so here are the takes :slight_smile:

Good parts

  • He likes that if can be used as an expression and it makes ternary operators cleaner.
  • He said something along the lines: “I love Ada, I just don’t understand why the developers hate documentation”. He was referring to documentation not being concise and condescending.
  • Regarding tasking: “Absolute delays is a cool concept, I never thought about it”.
  • Maybe not good per se, but he went from Ada 2022 to Ada 2012 as he was not using any Ada 2022 features and he wanted to keep as much backwards compatibility as possible.
  • He did a fairly large refactoring of the code, which was pretty nice and readable. The compiler helped most of the way. He is also happy with renames.
  • “I could see doing cool concurrent applications with tasks in Ada, like a web server”
  • “The core developers of the language, the ones that create it, are super cool”
  • User akoya_here: “but, ngl, I like the language, reading eepers code has been nice”
    • IMHO, it is not, by far, the cleanest Ada code out there! But indeed, Ada is pretty readable! ^^

Bad parts

  • He still has issues finding the attributes he wants for the different types. I share his pain.
  • He keeps doing 0..X-1 for arrays since he does not use 'First, 'Last and similar attributes.
  • Episode 21/20, 02:52h approx: “There are no useful unions in Ada” He is referring that unions are frozen at compile time. He was having issues during a large refactoring of the code (Hash Maps).
  • He does not like walls of text.

General comments

  • Ada search in Github is borked, it did not show most of the Ada projects when selecting the Ada language. It paints a pretty bleak picture and maybe it is lowering Ada in some benchmarks, such as Languish - Programming Language Trends
5 Likes

The query done by Languish, includes both the tag “ada” and the Ada language as conditions. It gives more results when you search a keyword “ada” for example, together with the language condition. It’s weird, because if you remove the keyword, 500 projects disappear.

But please, independently of that weirdness, everyone should add appropriate tags to their GitHub repositories for better discoverability, specially the “ada” tag.

3 Likes

The language filter is one aspect where SourceForge is definitely better.

He said it! :wink:
At 00h53m00s

2 Likes

The issue is, nobody can tell if he’s joking or not. Someone actually asked twice in the chat in one of the last few eps not sure which one, but he never answered them and they didn’t ask again when he went for a break.

That move could be influenced by the GNAT bug he found. I demonstrated him that it was related to the -gnat2022 switch and the compiler version he was using. Simplify Floor by using standard Ada attribute by mgrojo · Pull Request #5 · tsoding/eepers · GitHub

I think he has liked a lot the language. But, of course, saying that “this is going to be the big thing in a couple of years” probably can only be said as a joke, unless he’s so narcissist to think that his streaming is going to provoke a snow ball effect changing the game development landscape in two years!

That’s because “anonymous” is typically a bag of ‘ease’ that only yields bitter fruit: just look at all the BS surrounding anonymous access types. – Ease of use is fine, but the big “bang for your buck” would be the ability to address things at a more “generic” level and allow “current Ada” to be expressed therein.

One example is generics: there are several attempts at “automatic instantiation” which are, to be frank, doing it the stupid way: instead of realizing that the problem i inherently a combinatorial explosion needs to be constrained in any valid/usable solution — something like “Just [pre-]instantiate with all possible parameters” is obviously unworkable, whereas something like this proposal provides a method to allow generic instantiations to be “automatic” in the sense that default parameters are automatic.

I have found desire for auto instantiation for child packages of generics where the child package has no formal parameters. It kinda stinks you have to separately instantiate those. I like the option to instantiate them but would love it if I didn’t have to and the compiler could make an instantiation for those (tied to the parent package instantiation so it wouldn’t be anonymous).

I think the problem with anonymous access types was the rule set. I don’t believe the current rule set was the only means to handle them and was maybe too complex. There is definitely a need for anonymous access types to avoid unchecked programming with named access types (which is really a dangerous place to be), but a simpler implementation of the rule set that is understandable by the masses would be better (there are very few that understand the heart of darkness and they mostly refuse to teach it to anyone now adays). I saw that SPARK had something promising potentially implemented? I haven’t dug into it to see though.

5 Likes

Kudos to Tsoding; he has won my respect (even when he is still calling C floorf() instead of Float'Floor in his code).

1 Like

I second that.
I’m back on Ada coding (for the second time actually), and I felt the same need for easy accessible code snippets or Ada Idioms. And this true even for simple Containers usage.
My favorites references where John Barnes Ada05 book, the Rationale for Ada 2012, and now the overview of Ada 2022. But this is actually an illustration of Tsoding point about documentation : I have 20 years hold a complete reference that I need to (kind of) update myself with two language’s versions.
(To be honest, I also use lot’s examples and even a book on AdaCore site)
Il love to read small examples, that effective (and is probably what Tsoding would have expected).
I appreciate also to have a summary of language concepts in the background. For example, it was useful for me to read about the history of incomplete type since Ada 83. It help memorizing language features and vocabulary, and it helped me to directly identify what could be improved in my existing code, or my “mental templates”, thanks to the language evolution.

What I would suggest for the FAQ :

  1. using a non Ada specific language for tittle, to ease quick identification of the right section. As someone said, a new comer don’t know that he need to look for “protected type” or “indefinite type”.
    Even better, to use a C++ specific language!

  2. have a FAQ organisation “usage” oriented, and not “language concepts” oriented. For example, if I look for a vector example, I expect a Data Structure section (and not a Containers section, cf. previous point). In the C++ FAQ example, I would probably have to read sections “templates”, “inheritance”, “constructors/destructors”, etc.
    Seems less handy to me for a newcomer, and targeting more experienced users.

  3. to have a two Part approach.

    • First part, needed stuff for immediate copy & paste
      (Our target is a Tsoding clone : chop chop!! :slight_smile: )

      • short intro
      • example(s)
      • a link to download (Could be more convenient than copy & paste if it’s a separate file to get it already with the right name)
        By default, the first example is for the latest version of the language.
        Ada 2012 examples comes after, and for all provided code the minimal required version of the language should be highlighted.

      And that’s it.

    • Second Part (if needed), Further reading

      • reference to used standard packages in the reference manual
      • reference to other solutions (including outside of the FAQ)
      • reference to related topics in the FAQ
      • related Ada concepts and vocabulary
      • related C++, Haskell, etc. concepts if needed.

To have more concrete discussion on format/content, I can try to write some example.
What do you think?

2 Likes

Just added the Ada tag missing on 2 of my 3 Ada projects, thanks for the reminder :slight_smile:

Regarding Ada Rosetta Code Tasks, my experience shows that the tasks written in Ada vary significantly in quality. Some are just amazingly AWESOME in regards to code and/or explanation, some are ok and some are low quality (perhaps didn’t age well or just sloppily done). Sometimes the ones that are not the best quality mislead me completely and attempts to “fix” them lead me down rabbit holes or “whack the mole” frustration.

Retired Build Engineer