I’ve sometimes thought a good AI would be to make the standard library consistent, especially the Queue types. Off the top of my head, I shouldn’t have to write
The extra space is for the sign, which isn’t obvious at all. We’ve all complained that 'image should take extra parameters like the put procedures do.
I don’t know that string interpolation would help if they don’t specifically dictate how it prints the output.
Coming from C++ 20 odd years ago, you had to instantiate templates there.
Ah, you’re one of the one’s who implemented lox. I started one too , need to finish it.
If he bothered to search the index of the RM, he hates because of the colour and the lack of examples, he’d have found a list. If he’d had gone to the gnat manual on gcc’s site, he’d have found implementation defined ones.
The impression I get from portions of this thread is that “if only he bothered to read through,” he’d be (mostly) fine. While this is likely to be very accurate, this way of thinking may be hindering the chances of Ada’s further growth. Whether we like it or not, this is often a physical reality: reading documentation thoroughly and reading (expensive) books as a requirement for entry by definition raises the adoption barrier, and barriers do stand in the way.
Some of this may feel like “not our problem” (like the order of results that Google gives or the background of the Ada RM), but every bit counts and affects people, especially those who try to experiment with Ada in their own (limited) spare time. But these things can be changed; they are not immutable attributes of the physical reality.
There’s a lot of great Ada material out there, especially as published by AdaCore. The shift Alire is delivering is also making it easier to adopt (with M1 working well, it will open doors to a significant population of developers). It would be great if there were even more clarity on the licensing of GNAT. Anything confusing is turning people away. I know this because I am still a newcomer, too, and when I read AdaCore’s materials, I kept asking myself: “Does it apply to the free GNAT, too?” as I was never fully too sure.
One phrase I heard at some of the conferences stuck with me for more than a decade: “Every [documentation’s] page is the first page.” Consider that your readers come to any point in your documentation/materials. Will they be able to navigate and resolve their problems easily?
Earning adoption requires a lot of effort. Tsoding’s live streams are excellent for observing how people learn under time and/or pressure constraints.
Kind of. But in the videos on reading the map.txt into a string, he found Ada.Directories and just said “I want this shit” and closed it, that is after seeing it and scrolling around, no way he could’ve read any of that in the time he scrolled. That was exactly what he did with streams/files too. And these two packages are EXACTLY what he needed to 1) get the size of the file, create a string of that length and then 2) read the file into that string.
He kept dismissing the RM, even though it had what he wanted, because of the background colour.
I like the ada-lang.io’s formatting of the manual, but the warning (while likely very accurate) can and will dissuade people from using or trusting it. Without deep knowledge of Ada RM process and importance, this just indicates “something is wrong here”.
It’s easy to dismiss cases when people are using a product (manual, etc.) “wrong,” but this is also an opportunity to examine the product and see why people are using it wrong.
What does it not communicate, or communicate badly that other ecosystems were able to communicate efficiently?
My impression of the reason he dismissed the directories part was he was just looking for a simple “read file into string” capability that a lot of other languages just have baseline. He scanned through it looking for a “return String” from some sort of read file operation and didn’t see one (which it doesn’t have to my knowledge…without checking). I’m not sure even Ada.Text_IO has that off hand. It has get line (and he acknowledges that) but he is just looking for a simple language capability without having to remake something from scratch in a language he isn’t fully familiar with.
On the RM thing. It isn’t just the color that dissuades him, but the word clutter and lack of just plain examples. He learns via taking an example and playing with it (I sympathize with this method as I learn better this way too). The RM is hard to read and I think we forget that sometimes because we are familiar with Ada terminology enough that some things are second nature. Something on an RM page might jump out to us and we think “if he just read more closely” but I think we are forgetting our own biases here as we can plainly see the words he needs to see and he doesn’t. He lacks context of a lot of Ada terminology (which goes out of its way to be different from every other language it can), so even if he sees the right words he doesn’t readily recognize that they are the right words.
I do think if he slowed down it would help, but I think even doing that he would still miss things we consider obvious (because our reading of the RM is already biased by our experience).
@yrashk let me first say, welcome to the Ada community! Your feedback as a newcomer is great to have and I hope you continue to share it as you explore the language, despite some of the rough edges in terms of resources.
Most of us have been using the language for years, so it’s easy to not see things from a newbie point of view. If you are open to it, I would like to suggest as you learn the language, you can document what examples you would have found useful and share it with us. Comparing your list to the issues that Tsoding and others have reported may help identify key areas that the community can focus on.
BTW, if you have experience with C, C++, and/or Java, have you read the “Ada for the C++ and Java Developer” paper here?
That’s interesting.
Wondering, how would an automatic instantiation deal with something like the following?
procedure Instances is
generic
invar : Integer;
procedure Do_With_Invar;
procedure Do_With_Invar is null;
procedure Do_With_0 is new Do_With_Invar (0);
procedure Do_With_1 is new Do_With_Invar (1);
begin
Do_With_0;
Do_With_1;
end;
100%. I learned Ada on my own as a hobby and Tsoding encountered many of the same issues that I had when learning the language. This is exactly why I started ada-lang.io. I ran into a lot of old webpages and unmaintained sites and wanted a more modern place the community could contribute to, and did my best to make it easier to learn (e.g. there’s a cheat sheet)
I reverse-engineered the Ada auth formatter to create an MDX output. I’ve never worked professionally in Ada – I’m not sure how people use the ARM and Ada is used in safety critical systems so there’s a warning. Some ARM parts had been omitted at one time from the output, but I think most of it is fixed now. The intent was to improve on the original RM online formatting in a modern style, and that site is also searchable, courtesy of Algolia.
It’s sad that I never say Tsoding encounter the site in a stream.
Your work on ada-lang.io is commendable and very accessible. I’d be happy to contribute in any way I can (within my time constraints).
I wonder if part of the problem with ada-lang’s discoverability is SEO: when I google “Ada Reference Manual,” it is result #12. “Ada Manual” has no ada-lang.org nowhere in sight.
As for the warning plaque, I think it’s the proper caution, but as I said, it may serve as a deterrent to new users. What if it was less visible and tailored more toward the experienced Ada users who read into the spec (maybe smaller? at the bottom? or less aggressive colouring?); the wording can also be more tailored toward “if you need to make sure absolute alignment to the spec if you’re coming from critical domains, this may contain commissions or errors, you’re probably fine otherwise.” Just a thought.
I learned Ada on my own as a hobby and Tsoding encountered many of the same issues that I had when learning the language. This is exactly why I started ada-lang.io. I ran into a lot of old webpages and unmaintained sites and wanted a more modern place the community could contribute to
Thank you for your work! i’m actually someone who’s happy using Usenet, and following comp.lang.ada in particular, but i’m happy to use Discourse-based forums. (Much more so than Discord-based forums, for a number of reasons, but that’s another topic.)
i’m another person coming to Ada as a personal interest, rather than for professional reasons (albeit as someone who’s been programming for a few decades).
It’s easy to dismiss cases when people are using a product (manual, etc.) “wrong,” but this is also an opportunity to examine the product and see why people are using it wrong.
i second this, as someone who spends a lot of time writing documentation and trying to improve it (cf. e.g. here and here).
Natural language always has ambiguities through its usages in practice, and even native speakers of a given language are working within specific dialects and ideolects, so of course there can never be perfect wording/phrasing. But i feel documentation is often a “don’t let the perfect be the enemy of the good” situation - outside of formal documents that can only be changed through a formal process, like the ARM, there’s usually room for net increases in clarity with only relatively small amounts of work. Even if only one or two people are known to have misunderstood/misinterpreted something, it’s likely that there are quite a few more people who are also doing so, without having explicitly brought this to documenters’ attention (for whatever reason).
He admits he should be using packages in order to organise his code.
He finally hid a C function (external Raylib function) as a private procedure of another pure Ada function.
He said it looked much cleaner and nicer “It is so neat I can do this”.
He refactored a lot of code (eyes of the enemies) and it worked on his first try!!! He also worked a lot and thought about it a lot and tested a few prototypes. He was pleased with the result.
He is very happy with the wonderful Windows support.
Ada/GNAT/GCC has a Windows port known as Mingw. It is available in the Debian repos for cross-compilation. It basically worked once he got the linker flags right.
Many many many thanks to the Debian packaging team from my side. They rule!
He finally found the renames keyword and he is very happy to have it. This makes the code leaner, less repetitive, easier to read and prevents copying when using declare blocks!
The bad parts
Episode 15: He is working with void * directly… Once again, he did not take a deep look into the Pointers package…
He kind expected Ada to have left-hand expressions.
He is now working with pointers directly inside his Ada code D:
He had, once again, a ton of issues with Integer_IO…
I do not blame him.
Nonetheless, this is something you do once and forget about forever. It is not such a big issue imho.
Episode 16: he looked into the Elementary Function Generic package and knee-jerked out of it quite fast. He hates the idea of functions such as sin and cos being generic instantiations.
He crashed the compiler when trying to mod a float…
It eventually worked when he rewrote the expression a bit.
Nonetheless, as it did not do what he wanted, he created his own implementation.
General comments
He is spending a lot more on the game and less on Ada.
He is spending more on the algorithms, graphics, data reading, gameplay, etc.
As I said previously, this is expected.
He said that the source code would become available for all.
This will be a good opportunity if we can get the src before he makes his “Ada video”. That way we could make PRs to clean, improve and simplify his code and show what Ada can actually achieve!
Nonetheless, I doubt that he will take this into account, as he wants to talk about his experience, not the one that other people can give him.
“Ada is dumb and genius at the same time, I do not know what to think about it”
He saw that Ada identifiers could use unicode characters (see Pi)
However, I believe, this option is hidden behind a GNAT flag in order to prevent issues with other tools.
In episode 18 there is barely anything to report as it was mostly game focused.
I’ll be honest, I feel like this has a decent potential to backfire. We have a variety of personalities within the community and I am worried we will basically bumrush the guy with PRs/Issues and it is likely a few will not be as constructive for an outsider (what we consider constructive is not always viewed as constructive by others).
I’ve seen it happen before, we had a fellow making a lot of videos/tutorials on Ada and introducing it to a lot of non Ada folks in the programming community. He had multiple people send multiple messages telling him how he was pronouncing it wrong, over and over again. Where he was from, that was how you pronounced the name, but the messages persisted with each video and eventually he just got burned out having to deal with it. Some of his videos after that ended up being somewhat negative views on Ada and he eventually just stopped altogether.
I think we should be a bit careful in the manner/quantity we submit either PRs or Issues for it. Maybe focusing on the more important things that really showcase Ada’s strengths. And if you think it will help, maybe some prediscussion as a community before submitting any major ones? It might be fun to discuss a potential PR as a group (if it is an interesting PR).