Learned C++ in school, then took a class in Ada. I noticed I could write a project in a couple hours in C++ and then spend the next 3 days debugging. But with Ada it would take me 2 days to write the code, and about 15 minutes to debug. Took me awhile, but I learned to love it!
Well, that depends on the complexity of the task too... If you had to make an operating system, would Ada or Rust really be good alternatives to C/C++? I don't think so.
@@friedrichmyers People have already created an OS in Rust, the language is also in the Linux kernel. Personally, I find it rather annoying to write in Rust, but would much prefer it over C++ any day. I think lumping C and C++ together is also rather strange. They are not even that similar honestly.
I "studied" Ada as an Edinburgh University CS student in the early 80s, with access only to a book about it, rather than a working compiler. I love how you've renewed my interest in Ada with your exciting explanation of its type safe indexes. I don't remember that powerful feature, nor can I think of a similar thing cropping up in subsequent language designs elsewhere. Great job.
"[...] rather than a working compiler." I've read that in the history of Ada there was a time at the beginning where compiler developers advertised their support for Ada which in reality was extremely lacking and buggy ...is that what you refer to here? 😅
@@daruyami back when I was at Uni, Ada was the US DoD military standard MIL-STD-1815, and my lecturer recommended a recent published book on it to read (which I probably have in my attic). If you wanted a compiler, you wrote your own from that stuff.
@@000dr0g thanks for the response, I always love hearing about how differently people had to approach things like these back in the day! I guess all that stuff about the compilers must've come from the perspective of somebody that experienced the commercial side of Ada around that timeframe or maybe it was just another speck of misinformation from the internet lol. Anyways, did you end up working with Ada after that, or did you just study it for some time? Did it sound like anything amazing or innovative when compared to other technologies used at that time?
@@daruyami The Edinburgh CS course had a 3rd year module which examined the interesting features of Ada, which represented a step forward in thinking from the systems programming languages being used at the time. In particular, I remember we looked at the definition of its module/packages system and its concurrency model (tasks and rendezvous). Since swotting for the end of year exam on it, I've forgotten the details, and never looked at Ada since. This is why I am happy to see that these days I can easily try it out for real, and was happily surprised by Tsoding highlighting the Range feature, which I definitely did not remember.
@@000dr0g I was at the Army Comp Sci school late '91 to spring '92. I was studying System Administration, but my buddies were taking the programming track. They were expecting "C", but got Ada. Oh My God. These were already senior programmers that were going through a pud course to have the official job in the Army. The entire time I was at Ft. Gordon, all I heard was screaming, bitching, and gnashing of teeth about Ada. They barely had a compiler, and the first class spent their entire course building basic modules for the library. I'm talking basic routines to talk to a video display ( It was designed so the primary output was a line printer). Compared to Ada, Python is a gift from the programming gods. Hell, even Java is better. I heard that the school got rid of it after a while and went back to "C". They wrote off Ada as a big waste of time for everyone involved. It may have been a good language, "in theory", but was total trash when they tried to use it in anger.
The ALI file contains the dependencies so that the linker can generate the correct linking information, also the binder uses it to generate code that needs to run to initialise things in your code, as you found out in Ada you can initialise data even with executable code. ALI's are gnat specific. Original Ada compilers were more like LISP systems with a program database, which was specified by the standard. When initialising data, you don't have to put the items in order when using names, you can do ```Y => 0.0, X => 1.0```. GCC's binding generator isn't great, you have to do a lot of work to fix what it generates. The ' allows you to access the attributes of the object in the language, whether that's a type, a variable/constant, package, task, etc. Everything is an object (not in the OOP sense), and every object has a set of attributes (language defined ones are listed in the reference manual and implementation defined ones are in the compiler's reference manual), so you can get a types first and last values or the length of a string that way. Ada had object derivation (not in the OOP sense) from the first version, look at the example of deriving an unpacked record from a package one in the Ada 83 rationale. What you can do with Ada when binding to C is to provide bounds to types, thus giving your binding a type safe veneer over the C API, this I what I did with SDLAda, but I will say that bitfields are more difficult to bounds check. Also, binding burnout is a real thing, so beware when doing it by hand.
Kudos for proper Ada maskot! I am Ada programmer on freelance. I've done some complicated project in Ada on freelance, and eventually I receive maintenance tasks on it. There were several projects, but two were maintained several years. One died because of sanctions. 5:33 I have seen another Ada compilers. ObjectAda and AdaMagic. They can have file names module.spec.ada and module.body.ada. It's just GNAT beeing free and supporting latest Ada standard, defined de facto standards 9:06 Turbo Pascal has TPU, Delphi has DCU, Free Pascal has PPU. GNAT makes use of GCC object formats, but then it has to offload the rich metainformation that just does not fit into object files. So ALI = DCU - OBJ = PPU - O. For instance, Ada has predictable initialization (called elaboration in Ada standard). On most platforms this facility cannot be fully put inside O files, so it's offloaded to ALI. ALI specifies dependencies between packages, and GNATBIND creates the "main program" that invokes initialization code for packages in a topological order, and then starts the Ada program itself. Also, GNAT allows some tweaks to be done from that "main program", so "main program" is also a storage for tweaks. For instance, leap seconds support can be force enabled via binder settings. Printing exception stack trace is another popular option. C++ has favoritism. So whatever C++ demands, usually comes into file formats and tools i.e. inline variables that require some sort of deduplication, are handled by ld. C++ binder is forced into ld. And C++ initialization/finalization without guaranteed order. Ada has no such favoritism. Dull people are deaf to our demands. Some particular Ada compilers may possibly go Delphi way and invent their own DCU with all the information they need, but GNAT's decision to use native Mach-O/ELF/etc. formats lacking Ada features, lead to adoption of additional ALI files. 10:06 gprbuild serves me well enough that I even use it for pure C and C++ projects if I can decide about toolchain, but cannot decide about programming language. It can handle static or shared libraries. I miss grpbuild in Delphi. And I miss gprbuild in AdaMagic. It's Alire, the next layer, that is sometimes questionable, but gprbuild is good. 17:18 It's not a problem it's written in C. The problem is that it's written in C in an unlinkable way. Without COM. In 1990s OS/2 guys were laughing at Windows guys for having such a pathetic COM thing, no match for IBM SOM, but now we are on Linux, and Linux does not even have COM as a common thing. We are degrading on Linux. On Windows programmer would make COM facade for a library and then Python automatically generates binding from TLB. COM library vendor provides freedom to use library from Ada, Delphi, whatever. On Linux developers provide direct bindings. Direct binding from Python to a specific library, and that direct binding is not usable for other languages. By the way, for COM analogue on Linux I would recommend VirtualBox XPCOM as opposed to Mozilla XPCOM. 17:43 Some useful unsafe code could be hardened by CCured. CCured is the "interesting thing in C compilers" 19:48 You don't need Interfaces.C for interfacing with C. You need aspect Import or pragma Import and aspect Convention or pragma Convention with value C. Aspect is like attribute in COM IDL, Delphi and .NET. Aspects appeared lately in Ada, and old pragmas can be written in either syntax. Interfaces.C package is for C types. Sometimes long ago there could possibly be a situation where Ada Character is not the same as C char, and Ada Integer is not the same as C int, and for that matters Interfaces.C.char is what surely shall match C char. Nowadays it's all so ridiculous, it's legacy, and let's just use ordinary types. 23:37 Niklaus Wirth had big regrets about retaining from Algol begin-end in Pascal. He fixed his mistake in each and every subsequent language, starting from Modula and all the way to Oberon. Ada also has fixed this error. But they all together failed to phase out old bad Pascal, and this shame persisted. Each new RemObjects Oxygene inherits from shameful Pascal and does not contain fixes. What a pain. 25:33 Not perfect, but that comes from C developers. Usually it's convenient to make automatically generated bindings and they copy-paste manually reviewed pieces of source text. Also I've heard about Ada plug-in for SWIG, but don't know how mature it is. I recall the author tried to bind wxWidgets, and in wxWidgets there is a copyable class inheriting from non-copyable class, and such mind tricks do not map to Ada well. I have missed if SWIG became a real thing for Ada. 35:50 This is from Pascal. Not originated in Ada. And I am not sure about Pascal origins. Maybe Algol had it before. If compatibility is desired then: subtype Xs_Index is Integer range 1 .. 200; If compatibility is not desired, then it's possible to write type Xs_Index is new Integer range 1 .. 200; Turbo Pascal and Delphi also have similar syntax: type A = type B. But the wall between A and B is not as thick as in Ada. Delphi vendor does not study Ada and does not deliver features that Ada has for decades. Delphi customers also don't know Ada and don't demand. What a pain. 37:12 SPARK did not have pointers for a long time, but there was a container library for it. IIRC GNAT GPL 2012 is the latest one to contain it. Those containers had predefined capacity and used array of full capacity size. Map was implemented by balanced tree and array indices 39:35 Yeah, I tried to explain this to Rust programmers, how broken their enumerations are, but they have conversion to Integer, and they think it solves all the problem. Indeed I like how Pascal family languages enable organizing stuff on low level with convenient building blocks. 40:32 Indeed, another nice feature that I just can't get in another languages. Not in Delphi, not in Rust. Not a rocket science, but they won't do. 41:12 And that's huge omission from Ada. Unlike Pascal, Ada parameters are read-only by default, but ordinary variables are mutable. So we're stuck with writing constant. That surely improves readability and reasoning. Rust started later and made immutable by default, that is certainly a good thing. Delphi has recently introduced inline variable declarations with assignment. Alright, but next logical step would be inline constant declarations. But one needs to know Ada to know one's next steps in language evolution, and Delphi vendor lacks that wisdom. 42:43 Speaking about abstraction, you can instantiate Ada.Containers.Vectors with "type Some_Index is new Positive;"
That's a really good introductory video on Ada, the only thing that I wish you had mentioned would be Alire, it's quite a fresh piece of the whole toolchain, however it's becoming a vital one. Anyways, nice work!
Ada seems like a language that has developed healthily, it seems like a language I can see myself using. It's simple, and aside from a few personal preferences, it's quite to my liking. And it's interesting to finally see the origin influence behind Odin's enumerated arrays(it works exactly the same), which is one of it's best features. Overall seems like a great language, and I'd love to see a wider adoption of it, over *a lot* of other languages currently in use. I'll definitely give it a shot. Thank you for this video, Zozin!
@@joshuadonahue5871: Pascal (with Oberon in between, and maybe something I'm forgetting?) is a known influence on Ada (and I think shares a language designer).
This is the language I always bring up when someone asks me about my favorite, this is it. Built-in language level concurrency, really good type system, pre and post contracts (runtime), Ada Spark, and now Alire for package manager. However... AdaCore supports GNAT (built tools) and doesn't provide bug fixes for the community edition, until the next major release. There is also really only x86 support, meaning on Apple Silicon it will compile to x86 on Mac. It can cross compile to ARM/RISC, but not for ARM on macOS. There is a way to get native AARCH64 builds for macOS, but its a rabbit hole. Editor support is also... lacking. The go to editor is GNAT Studio is Linux/Windows only, (there is a community build for macOS - iffy). SooOoOo, don't expect hand holding when working in this language. I really wanted to use this for embedded programming as this is where it shines but I end up getting lazy and instead reach for Rust.
@@jlewwis1995 there is a community project to get the gcc toolchain to work on m1 natively. simon jwright provides a community edition you can use with Alire to compile for native Apple.
Really great video. Educational, having code large enough to actually be properly visible, not repeating yourself so that it feels focused. Very enjoyable.
The code written in C and C++ is probably well-established, which means we can rely on it despite the fact it was written in memory-unsafe languages. On the other hand, the new code that we write is worth writing in memory-safe languages even though we link it with c/c++ code.
It is somewhat true, to some extent. I think you don't really get reliable code when reaching for a C lib, but you'll get the same errors as everybody else. 😄
@@beauteetmusculation8191 I think even if linking to a C/C++ lib isn't inherently safe, you can at least constrain much of the risk to just those libraries. I also think that even with so much code being written in C/C++, it doesn't mean many of those codebases can't be migrated to other languages over time
@@ScipiPurr With thread/memory/address/leak/undefinedbehavior sanitizers we have now, you can extensively test your usage and internals of those libraries (if you can compile them from source) yourself, and get most of the benefits of being "memory safe" and more (deadlock possibility detection in tsan is goty), just in runtime, and obviously, in your extensive test suite you should already have.
C++ is almost as memory-safe as Rust if there was an option to disable some features. The way move semantics work is almost like ownership. Also, Rust doesn't preclude undefined behaviors either, so its not totally memory safe and you can indeed leak memory in some cases, you can break it without even invoking "unsafe". Particularly I think garbage collectors are a better solution to the problem of managing memory at scale, the fact that the hardware doesn't have optimizations for garbage collectors is the problem. We really need some kind of pointer tagging system, either to solve the spectre problems with leaking on hardware and to make GC faster and more predictable. Memory allocation speed should have never been a problem as programs shouldn't be allocating memory at steady state, if you don't do something, it doesn't matter how costly it is do it. Everything should always go on stack, so the fact that you can have "arenas" to speed up GC is enough. The real problem is that programmers rely on algorithms that uses too much pointers, like trees, those are kind of slow, we should use arrays, like John Backus intended Fortran to be, no suck shenanigans as "pointers" or dynamic memory.
I used Ada in college and I liked it very much. No one else in my class figured out how to interface Ada with assembler to manipulate the serial port, but me. That was one of my proudest moments in college :)
This was amazing. I absolutely fell in love with Ada. How did we go from such a beautiful language to some of the atrocities we see today is beyond me.
34:25 The 'Image is because you are not printing the array, you are printing the string representation of that array (so its appearance, in a way, its 'Image'). It is type safe, works with wide strings using Wide_Image... And it is very cool with enums and NULL stuff like that when printing
@@PhthaloJohnson One big thing in Ada is clarity and definition about what is being done. Let’s say we don’t use ‘Image, but .To_String. We return a string with that function otherwise it is just Put_Line. Well, if I get a list of int as inputs. How do I know the size of the return value ? (Out). It may not depend ? What if there are side effects at the same time ?…
@@PhthaloJohnson another way of saying it. Using Ada syntax, if Read_File was outputting the content of the file, then we would have to know the contents of that file before reading it to be able to write the return type at definition
Thanks a lot for this video. It's great to see you again on this channel. I just discovered a bit of Ada thanks to you, and I agree with almost all your takes. Simplicity is the most complicated goal in programming and computer engineering in general, but by far the most rewarding.
I was like "I dont want to lost 50 minutes to know if a 40+ yo language will replace another 40+ yo language, the answer seems obvious". Thx for this tl;dr
Very cool coverage of all steps to try this by myself, after 10 years of not writing any ADA line code :) Was used as base language to teach procedural programming in some French high-school. Planes produced in France are / were shipping ADA code as critical code for flight. Trading in the biggest bank company from here have / were actually got production code in ADA too.
Totally agree with the take about reading the source. People seem to think libraries are magic. A funny aside, is that, among friends, we've been referring to reading the code as the "russian docs" xd
Interesting format of videos. Was listening while washing dishes and then Ada kinda reminded me on PL/SQL. I googled that, it turns out Oracle borrowed syntax from Ada.
I was introduced to Ada while in college in the 1990s. I really liked it and it has always held a special place in my heart. Unfortunately, it wasn't the language that was going to get my career started. I appreciate this video.
Thanks for another great video! Made me curious about exploring Pascal again. Turns out Pascal has quite exactly those same features with indexing and enumerations! I knew about those enumerations, but I wasn't sure about the array indexing aspect. Now I tried it on linux with freepascal. Ada en Pascal are very similar here too. Actually great, also from memory safety perspective. Somehow, many years of having to work in someone else's existing Delphi code (which is really just a Pascal dialect) never invited me to explore every aspect of the language myself. Especially also because none of those good things where ever in all that code. And I have always been more a C family languages guy and worked with C# too. Maybe Ada is more memory safe on other aspects as well, or the compiler does more checks, I don't know. But both Pascal and Ada deserve actual credits I think.
Sometimes I feel I am tired of software. I think I will just give up or something, then I watch Tsoding and I remember why I always loved programming. You are a legend. I watch your videos since back Haskell times. I don't have the time for the twitch stuff but I wish I did. Keep being awesome, and thank you. ❤ Ps. Another video about Ada would be quite cool.
Not surprising. One of the few areas where Ada still has a large (for the industry) following is embedded programming, which is a next-door neighbor to FPGA programming.
That's because VHDL was actually based on ADA. ADA was already intended to be a replacement for C in the late 70's. It had military roots.. just like VHDL.
*Jeezy Voice: Welcome back, welcome back This got a 1990s elementary "The Learner Will" video mixed with PBS documentary vibe. You got a spicy bag o talent.
It has replaced C for me and it is so much better that words would not suffice. Truly I say to you that Ada is the best language for embedded, memory registers/drivers and network protocols.
The point of the NSA recommendation (and also the general one from the White House) is that C (and C++ to certain extend) has been problematic due to bugs and memory safety, while that could be a skill issue of the programmers, we still have those problems since several decades because there isn't a good solution for them due to the nature of the languages. What they are saying is more nuanced, like "if this program can be written in a memory safe language, do it that way" which should be the first consideration in many areas where cybersecurity is critical. And even they say that are areas where C cannot be replaced like avionic or satellite systems, where the garbage collector nature could be a great problem. At the end their intention is not to replace C but only using it in areas were its capabilities are a requirement.
Ada is a really cool language. I hope I have some time to check it out. Zig is similar to Ada in how they interop with c. It’s interesting how they are focusing on the tool chain and building things from the ground up while supporting interop with c from the beginning.
We have too many people in government talking about things they don't know about. I cringed every time they used the word "algorithm" when questioning that tiktok guy. Like that was their big word for the month.
35:17 ...and that will actually work...almost... I love the way you present. I came for copper, and I found gold - your works are indeed gold to me. IMHO.
I am computer language agnostic. My personal favorate language was PL/I on an IBM s/370 mainframe. C/C++ is a decent language to me, but I prefer something a bit more high level.
I did my masters degree about a subset of Ada, called SPARK, that was being promoted for use in critical systems and other safety critical stuff. I started a PhD about formal verification of concurrency using SPARK but I gave up on the PhD half way through. That being said... I think that a LOT of people that are in the safety critical domain use it but for everyday development? Most people don't even know the language... Ada is actually quite cool for that use case.
You're right on both fronts, but does the fact "most people" don't know it count? I mean, see all the hype with Rust, while, in effect, almost nobody knows the language either. It's not a valid point in itself. When you don't know something, you learn. Actually, having to spend a little more time learning a language before using it is IMO a strong point rather than a weakness. C has been used and abused by thousands of people who never cared to learn it properly (and there's probably only a few % of C developers who really master it.) Probably because it was so ubiquitous and looked so simple on the surface.
24:23 with “Hello from AdaglBlendFunc”. I like the casual example of an out of bounds read achieved in an approved “safe” language. PS Thanks for an interesting overview of Ada. It’s turned out to be quite a curious creature.
Hey man, you're really cool. I am watching the streams on twitch where you were developing Ada, and I am glad you finished it on stream. I really enjoy watching you program and seeing how you think, you're like the programmer I aspire to be really. Thanks for the vids and all the work.
Listening to anything the NSA has to say is quite funny if you care about security and privacy. That said, Ada is a good one in the list - modern Pascal is not too bad either. For the rest of the list, like Go, Java or Ruby, while certainly they avoid directly tinkering with memory, which may look safer, they have a host of other potential issues that, from a security POV, make them a joke. Ada is pretty good though, and it has standards. Which, apart from the satisfaction, means that anyone can write compilers for it and compile Ada code correctly. Try writing a Rust compiler yourself, that is going to compile all existing Rust code base correctly, and call me: they don't have a full official spec yet, and so the "spec" is still the compiler itself. Which essentially prevents anyone from reimplementing a compliant compiler from scratch.
17:39 So, this is an interesting take in many ways, but are you considering the possibility of making applications by making code in safe languages? I don't think it is a justified argument to draw that, from the fact we use past-written C/C++ code to make useful things, it implies that it "vanishes" the safety benefits of safe languages.
Thank you so much for the time you have taken to make this video. This is the second time I muster up the courage to reach out to you regarding which path to take in the field of programming languages. Perhaps you or one of the readers could guide me, especially since I don't have anyone else in my area to ask for advice. Towards the end of the video, you mentioned integrating Ada into a resume to land a job in the programming industry. I believe you answered no, and truthfully, I am unsure which language to turn to for this purpose. I'd like to express my interest in programming by learning a language that would allow me to secure a remote job. Thank you very much. I understand you may not have the time to reply personally, but if anyone from the community could offer guidance, I would be immensely grateful.
That game looks a bit like a fun version of that Adventure game on the Atari 2600! Awesome stuff man, I love your commitment to digging your heels in and just grabbing any old language by its short and curlies!
It’s amazing how I went this exact same route when I looked into ADA. And ADA tasks are probably the coolest native concurrency implementations. Eons before c++14. It’s equally relevant running on bare metal, in RT controllers and on huge hardware like z/Series. That in itself is pretty fascinating. Also , if we ever decide to evaporate Pyongyang, chances are that ADA firmware will be driving that train. P.s. I dunno why autocorrect wants ada in caps or in lowercase but I’m too lazy to fix it
очень крутой видос получился. thanks bro! the edit is concise and captivating. you really help me get my motivation going. you see, i think i started burning out at work around a year ago, i took a couple of months off work, and tried to recover, but ever since i've been having troubles keeping myself motivated at programming (even my own side projects) so i wanted you to know: i appreciate the work that you do like making content and editing videos, it helps me getting through these tough couple of months. thank you
I've been enjoying your stream and the Tsoding daily channel, but this long form edited style really fucking works nice man! I came across Ada when working for a company that provided code analysis tools for safety critical applications. Ada seemed to be a relevant choice in these areas.
So in Ada arrays can be mapped by ranges and enumerators (*like in pascal*) :) a lot of interesting things are present in pascal that should be everywhere like native bit sets for enumerators etc..., curious about the concurrency and other things of the language tho, will look into it!
Who should learn Ada? Embedded developers and electrical engineers. Ada is the go to if you work in aviation or military applications, at least here in EU. I think it is also heavily used in automotive but I don't have concrete data to back my claim.
Some of the expressiveness at the end reminds me of Apple's new language Pkl. For those types that are ranges, do you need to use them like enumerations or can you perform arithmetic? And if you can perform arithmetic, how does the type behave if it overflows? Maybe I just need to read the docs... Fascinating video, thanks for taking the effort here to break this all down.
I ask how they behave because I think it relates strongly to a lot of the "try_" style functions in Rust, and the complexity that seems to drive downstream to a dev.
It's really fascinating that Ada seems to take this route of add complexity to language "words" to improve relationship expression between them instead of driving that to the runtime of the program. I wonder if so many languages seem to have a small set of source symbols because they are developed by English-speaking workers as opposed to German or Chinese. Where a single word is as expressive as a whole sentence in English.
damn that game looks amazing! its very aesthetically pleasing and mechanically interesting, which Im not going to lie, is not usually a strong point of a lot of amazing programmers lol.
It would be fun (and probably a lot of work) to write simple games or engines in a niche language that wasn't designed for it. For example, using Julia, or Haskell, R or even Brainfuck. Depending on the level of crazy you want.
17:17 what i really want is a new standard for FFI that isn’t limited by C’s weak type system and allows different languages to communicate with each other what they know about the code and what they don’t. i think it should probably allow further specification than what the language the code was written in allows, kind of like typescript specification files for js libraries, so assuming we trust the specification, you can write code in most other languages using only safe primitives linking against it
We kinda do something like that. Well try to avoid the need for it by separating algorithm and datastructure implementation and program against either abatractions or streams of values sorta, but how ron???
@@ron5948 who is "we" in this case? this is not something I've heard of. i'm also not sure how separating algorithm and datastructure implementation would help avoiding the need for it
I learned ada in the university, and appart from being a pain in the ass when you are learning, Right now I missed it a little bit, now I'm learning rust and swift... I will be happy if ada grows and is more usable.
I started my studies in CS with Pascal, and now I can again see why I loved it. Simple, fast, typed etc. Ada is the grandfather/mother of Pascal. it is true that you debug these types of systems faster and documentation is mostly automatic. PS: Pascal also has indexes that can start from negative up to positive. You specify loop with "to" or "downto".
@@gautierdemontmollin3753 You are correct. I am getting old. I am confusing ADA with ALGOL. They start with A and it went south from there. Pascal is refered to as an ALgol-based language. Thanks for the correct
Holly shit, this is an amazing video!!! I really liked the style and how you approach the demo! I'm wondering if you will upload the ada session in entirity on your daily channel, really loking forward in watching it!!!! Thanks!!
Took me a bit to notice this was not the Tsoding Daily channel. Welcome once again, 3rd owner of the channel 😊
Wow. I was subbed to daily and not this channel 😂
Love your content tsoding.
3rd owner? Sorry im new here this channel was just recommended to me
I didn't notice until the very end
Whew! I thought all videos are gone
Learned C++ in school, then took a class in Ada. I noticed I could write a project in a couple hours in C++ and then spend the next 3 days debugging. But with Ada it would take me 2 days to write the code, and about 15 minutes to debug. Took me awhile, but I learned to love it!
Well, that depends on the complexity of the task too... If you had to make an operating system, would Ada or Rust really be good alternatives to C/C++? I don't think so.
@@friedrichmyers Why would C be better? What features does it have that you would need that Ada wouldn't have?
@@dalestanbrough2290 Too much handholding on memory. Too much complexity compared to C (When you C, you C the Assembly).
@@friedrichmyers”when you C, you C the assembly” is nice
@@friedrichmyers People have already created an OS in Rust, the language is also in the Linux kernel. Personally, I find it rather annoying to write in Rust, but would much prefer it over C++ any day. I think lumping C and C++ together is also rather strange. They are not even that similar honestly.
I "studied" Ada as an Edinburgh University CS student in the early 80s, with access only to a book about it, rather than a working compiler. I love how you've renewed my interest in Ada with your exciting explanation of its type safe indexes. I don't remember that powerful feature, nor can I think of a similar thing cropping up in subsequent language designs elsewhere. Great job.
"[...] rather than a working compiler." I've read that in the history of Ada there was a time at the beginning where compiler developers advertised their support for Ada which in reality was extremely lacking and buggy ...is that what you refer to here? 😅
@@daruyami back when I was at Uni, Ada was the US DoD military standard MIL-STD-1815, and my lecturer recommended a recent published book on it to read (which I probably have in my attic). If you wanted a compiler, you wrote your own from that stuff.
@@000dr0g thanks for the response, I always love hearing about how differently people had to approach things like these back in the day! I guess all that stuff about the compilers must've come from the perspective of somebody that experienced the commercial side of Ada around that timeframe or maybe it was just another speck of misinformation from the internet lol. Anyways, did you end up working with Ada after that, or did you just study it for some time? Did it sound like anything amazing or innovative when compared to other technologies used at that time?
@@daruyami The Edinburgh CS course had a 3rd year module which examined the interesting features of Ada, which represented a step forward in thinking from the systems programming languages being used at the time. In particular, I remember we looked at the definition of its module/packages system and its concurrency model (tasks and rendezvous). Since swotting for the end of year exam on it, I've forgotten the details, and never looked at Ada since. This is why I am happy to see that these days I can easily try it out for real, and was happily surprised by Tsoding highlighting the Range feature, which I definitely did not remember.
@@000dr0g I was at the Army Comp Sci school late '91 to spring '92. I was studying System Administration, but my buddies were taking the programming track. They were expecting "C", but got Ada. Oh My God. These were already senior programmers that were going through a pud course to have the official job in the Army. The entire time I was at Ft. Gordon, all I heard was screaming, bitching, and gnashing of teeth about Ada. They barely had a compiler, and the first class spent their entire course building basic modules for the library. I'm talking basic routines to talk to a video display ( It was designed so the primary output was a line printer). Compared to Ada, Python is a gift from the programming gods. Hell, even Java is better. I heard that the school got rid of it after a while and went back to "C". They wrote off Ada as a big waste of time for everyone involved. It may have been a good language, "in theory", but was total trash when they tried to use it in anger.
Wait a minute, THIS IS the OG channel. That's @everyone was pinged instead of the @Pinged. Damn congrats bro
Ruby mentioned btw
the (third) owner of main Tsoding channel finally remembered his password
Why third owner?
@@lolcat69 have you seen the other two guys who run this channel?
@@cobbcoding Wow i also follow you and you watch this guy😂
Lol
Do you exist only to robotically boost the algorithm of youtubers?
The ALI file contains the dependencies so that the linker can generate the correct linking information, also the binder uses it to generate code that needs to run to initialise things in your code, as you found out in Ada you can initialise data even with executable code. ALI's are gnat specific. Original Ada compilers were more like LISP systems with a program database, which was specified by the standard.
When initialising data, you don't have to put the items in order when using names, you can do ```Y => 0.0, X => 1.0```.
GCC's binding generator isn't great, you have to do a lot of work to fix what it generates.
The ' allows you to access the attributes of the object in the language, whether that's a type, a variable/constant, package, task, etc. Everything is an object (not in the OOP sense), and every object has a set of attributes (language defined ones are listed in the reference manual and implementation defined ones are in the compiler's reference manual), so you can get a types first and last values or the length of a string that way. Ada had object derivation (not in the OOP sense) from the first version, look at the example of deriving an unpacked record from a package one in the Ada 83 rationale.
What you can do with Ada when binding to C is to provide bounds to types, thus giving your binding a type safe veneer over the C API, this I what I did with SDLAda, but I will say that bitfields are more difficult to bounds check. Also, binding burnout is a real thing, so beware when doing it by hand.
Tsoding 2: Here We Цод Again
He's back! Glad to see you uploading again. The Rust contingent must be furious to have their golden child appear in a list with Ada and Go. 😅
And Ruby
@@angelcaruAnd python
Why?
@@driedurchinask chatGPT
And Pascal.
Kudos for proper Ada maskot!
I am Ada programmer on freelance. I've done some complicated project in Ada on freelance, and eventually I receive maintenance tasks on it. There were several projects, but two were maintained several years. One died because of sanctions.
5:33 I have seen another Ada compilers. ObjectAda and AdaMagic. They can have file names module.spec.ada and module.body.ada. It's just GNAT beeing free and supporting latest Ada standard, defined de facto standards
9:06 Turbo Pascal has TPU, Delphi has DCU, Free Pascal has PPU. GNAT makes use of GCC object formats, but then it has to offload the rich metainformation that just does not fit into object files. So ALI = DCU - OBJ = PPU - O. For instance, Ada has predictable initialization (called elaboration in Ada standard). On most platforms this facility cannot be fully put inside O files, so it's offloaded to ALI. ALI specifies dependencies between packages, and GNATBIND creates the "main program" that invokes initialization code for packages in a topological order, and then starts the Ada program itself. Also, GNAT allows some tweaks to be done from that "main program", so "main program" is also a storage for tweaks. For instance, leap seconds support can be force enabled via binder settings. Printing exception stack trace is another popular option.
C++ has favoritism. So whatever C++ demands, usually comes into file formats and tools i.e. inline variables that require some sort of deduplication, are handled by ld. C++ binder is forced into ld. And C++ initialization/finalization without guaranteed order. Ada has no such favoritism. Dull people are deaf to our demands. Some particular Ada compilers may possibly go Delphi way and invent their own DCU with all the information they need, but GNAT's decision to use native Mach-O/ELF/etc. formats lacking Ada features, lead to adoption of additional ALI files.
10:06 gprbuild serves me well enough that I even use it for pure C and C++ projects if I can decide about toolchain, but cannot decide about programming language. It can handle static or shared libraries. I miss grpbuild in Delphi. And I miss gprbuild in AdaMagic. It's Alire, the next layer, that is sometimes questionable, but gprbuild is good.
17:18 It's not a problem it's written in C. The problem is that it's written in C in an unlinkable way. Without COM. In 1990s OS/2 guys were laughing at Windows guys for having such a pathetic COM thing, no match for IBM SOM, but now we are on Linux, and Linux does not even have COM as a common thing. We are degrading on Linux. On Windows programmer would make COM facade for a library and then Python automatically generates binding from TLB. COM library vendor provides freedom to use library from Ada, Delphi, whatever. On Linux developers provide direct bindings. Direct binding from Python to a specific library, and that direct binding is not usable for other languages.
By the way, for COM analogue on Linux I would recommend VirtualBox XPCOM as opposed to Mozilla XPCOM.
17:43 Some useful unsafe code could be hardened by CCured. CCured is the "interesting thing in C compilers"
19:48 You don't need Interfaces.C for interfacing with C. You need aspect Import or pragma Import and aspect Convention or pragma Convention with value C. Aspect is like attribute in COM IDL, Delphi and .NET. Aspects appeared lately in Ada, and old pragmas can be written in either syntax.
Interfaces.C package is for C types. Sometimes long ago there could possibly be a situation where Ada Character is not the same as C char, and Ada Integer is not the same as C int, and for that matters Interfaces.C.char is what surely shall match C char. Nowadays it's all so ridiculous, it's legacy, and let's just use ordinary types.
23:37 Niklaus Wirth had big regrets about retaining from Algol begin-end in Pascal. He fixed his mistake in each and every subsequent language, starting from Modula and all the way to Oberon. Ada also has fixed this error. But they all together failed to phase out old bad Pascal, and this shame persisted. Each new RemObjects Oxygene inherits from shameful Pascal and does not contain fixes. What a pain.
25:33 Not perfect, but that comes from C developers. Usually it's convenient to make automatically generated bindings and they copy-paste manually reviewed pieces of source text. Also I've heard about Ada plug-in for SWIG, but don't know how mature it is. I recall the author tried to bind wxWidgets, and in wxWidgets there is a copyable class inheriting from non-copyable class, and such mind tricks do not map to Ada well. I have missed if SWIG became a real thing for Ada.
35:50 This is from Pascal. Not originated in Ada. And I am not sure about Pascal origins. Maybe Algol had it before. If compatibility is desired then: subtype Xs_Index is Integer range 1 .. 200; If compatibility is not desired, then it's possible to write type Xs_Index is new Integer range 1 .. 200;
Turbo Pascal and Delphi also have similar syntax: type A = type B. But the wall between A and B is not as thick as in Ada. Delphi vendor does not study Ada and does not deliver features that Ada has for decades. Delphi customers also don't know Ada and don't demand. What a pain.
37:12 SPARK did not have pointers for a long time, but there was a container library for it. IIRC GNAT GPL 2012 is the latest one to contain it. Those containers had predefined capacity and used array of full capacity size. Map was implemented by balanced tree and array indices
39:35 Yeah, I tried to explain this to Rust programmers, how broken their enumerations are, but they have conversion to Integer, and they think it solves all the problem. Indeed I like how Pascal family languages enable organizing stuff on low level with convenient building blocks.
40:32 Indeed, another nice feature that I just can't get in another languages. Not in Delphi, not in Rust. Not a rocket science, but they won't do.
41:12 And that's huge omission from Ada. Unlike Pascal, Ada parameters are read-only by default, but ordinary variables are mutable. So we're stuck with writing constant. That surely improves readability and reasoning. Rust started later and made immutable by default, that is certainly a good thing. Delphi has recently introduced inline variable declarations with assignment. Alright, but next logical step would be inline constant declarations. But one needs to know Ada to know one's next steps in language evolution, and Delphi vendor lacks that wisdom.
42:43 Speaking about abstraction, you can instantiate Ada.Containers.Vectors with "type Some_Index is new Positive;"
That's a really good introductory video on Ada, the only thing that I wish you had mentioned would be Alire, it's quite a fresh piece of the whole toolchain, however it's becoming a vital one. Anyways, nice work!
took a good 10 minutes to notice this wasn't just an extra-fancy tsoding daily video :p
Ada seems like a language that has developed healthily, it seems like a language I can see myself using. It's simple, and aside from a few personal preferences, it's quite to my liking. And it's interesting to finally see the origin influence behind Odin's enumerated arrays(it works exactly the same), which is one of it's best features.
Overall seems like a great language, and I'd love to see a wider adoption of it, over *a lot* of other languages currently in use. I'll definitely give it a shot.
Thank you for this video, Zozin!
I think they were both influenced by pascal on enumerated arrays, but I'm not sure
@@joshuadonahue5871: Pascal (with Oberon in between, and maybe something I'm forgetting?) is a known influence on Ada (and I think shares a language designer).
@@absalomdraconis Modula 2, maybe.
Yes, you are right.
@@absalomdraconisOberon, Pascal and Modula-2 were designed by Nicolaus Wirth., while Ada was designed by Jean Ichbian.
I first found you by searching for ada a few years back. Now I find a new channel. Nice work, and thank you for sharing!
The channel is back baby!
but your father don't.
@@musdevfrog bro what?
This is the language I always bring up when someone asks me about my favorite, this is it. Built-in language level concurrency, really good type system, pre and post contracts (runtime), Ada Spark, and now Alire for package manager. However... AdaCore supports GNAT (built tools) and doesn't provide bug fixes for the community edition, until the next major release. There is also really only x86 support, meaning on Apple Silicon it will compile to x86 on Mac. It can cross compile to ARM/RISC, but not for ARM on macOS. There is a way to get native AARCH64 builds for macOS, but its a rabbit hole. Editor support is also... lacking. The go to editor is GNAT Studio is Linux/Windows only, (there is a community build for macOS - iffy). SooOoOo, don't expect hand holding when working in this language. I really wanted to use this for embedded programming as this is where it shines but I end up getting lazy and instead reach for Rust.
It only supports x86, not x64? Dang I bet the optimization support isn't that great either then :v
@@jlewwis1995 there is a community project to get the gcc toolchain to work on m1 natively. simon jwright provides a community edition you can use with Alire to compile for native Apple.
Really great video. Educational, having code large enough to actually be properly visible, not repeating yourself so that it feels focused. Very enjoyable.
Your description of array, range and indices in Ada provided more insight and food for thought than I was expecting from this video. Well done!
These features are very interesting.
The code written in C and C++ is probably well-established, which means we can rely on it despite the fact it was written in memory-unsafe languages. On the other hand, the new code that we write is worth writing in memory-safe languages even though we link it with c/c++ code.
It is somewhat true, to some extent. I think you don't really get reliable code when reaching for a C lib, but you'll get the same errors as everybody else. 😄
@@beauteetmusculation8191: Your code will be as reliable as the wrappers that you write.
That is the problem.
@@beauteetmusculation8191 I think even if linking to a C/C++ lib isn't inherently safe, you can at least constrain much of the risk to just those libraries. I also think that even with so much code being written in C/C++, it doesn't mean many of those codebases can't be migrated to other languages over time
@@ScipiPurr With thread/memory/address/leak/undefinedbehavior sanitizers we have now, you can extensively test your usage and internals of those libraries (if you can compile them from source) yourself, and get most of the benefits of being "memory safe" and more (deadlock possibility detection in tsan is goty), just in runtime, and obviously, in your extensive test suite you should already have.
C++ is almost as memory-safe as Rust if there was an option to disable some features. The way move semantics work is almost like ownership.
Also, Rust doesn't preclude undefined behaviors either, so its not totally memory safe and you can indeed leak memory in some cases, you can break it without even invoking "unsafe".
Particularly I think garbage collectors are a better solution to the problem of managing memory at scale, the fact that the hardware doesn't have optimizations for garbage collectors is the problem.
We really need some kind of pointer tagging system, either to solve the spectre problems with leaking on hardware and to make GC faster and more predictable.
Memory allocation speed should have never been a problem as programs shouldn't be allocating memory at steady state, if you don't do something, it doesn't matter how costly it is do it. Everything should always go on stack, so the fact that you can have "arenas" to speed up GC is enough.
The real problem is that programmers rely on algorithms that uses too much pointers, like trees, those are kind of slow, we should use arrays, like John Backus intended Fortran to be, no suck shenanigans as "pointers" or dynamic memory.
I used Ada in college and I liked it very much. No one else in my class figured out how to interface Ada with assembler to manipulate the serial port, but me. That was one of my proudest moments in college :)
When the world needed him most, he returned
I hope you upload more frequently on this channel. I love listening to you explaining things when it comes to programming.
Amazing video. Loved it. Gotta try out Ada at some point. Actually looks very unique and interesting
Till you actually want to do something with it - the language and its ecosystem are a mess.
This was amazing. I absolutely fell in love with Ada. How did we go from such a beautiful language to some of the atrocities we see today is beyond me.
We are so back! Also sickest thumbnail art!
Thank you for covering Ada! I'm a total smelly nerd for this language. Really wish there'll be more videos about it!
I did not expect to see a new upload on this channel in my lifetime, yet here I am.
I'm exited to see where this continues.
34:25 The 'Image is because you are not printing the array, you are printing the string representation of that array (so its appearance, in a way, its 'Image'). It is type safe, works with wide strings using Wide_Image... And it is very cool with enums and NULL stuff like that when printing
OK, why is it not a function? Why introduce new syntax, that's not even nice?
@@PhthaloJohnson One big thing in Ada is clarity and definition about what is being done.
Let’s say we don’t use ‘Image, but .To_String. We return a string with that function otherwise it is just Put_Line. Well, if I get a list of int as inputs. How do I know the size of the return value ? (Out). It may not depend ? What if there are side effects at the same time ?…
@@PhthaloJohnson another way of saying it. Using Ada syntax, if Read_File was outputting the content of the file, then we would have to know the contents of that file before reading it to be able to write the return type at definition
the type system in ada seems to be very neat. Really like how expressive it is without any comments
Instant subscription.
I had an Ada course in college 30+ years ago.
Thanks a lot for this video. It's great to see you again on this channel. I just discovered a bit of Ada thanks to you, and I agree with almost all your takes.
Simplicity is the most complicated goal in programming and computer engineering in general, but by far the most rewarding.
Short answer - no. Long answer - no.
Was a click-bait title, truthfully.
All I needed was a glimpse of the language, and that says much considering we are talking about c++ in the same context
@@therealpeter2267I don’t know any language that enforces value constraints like Ada does. It’s a very rigid language for very demanding applications
I was like "I dont want to lost 50 minutes to know if a 40+ yo language will replace another 40+ yo language, the answer seems obvious". Thx for this tl;dr
Curious to see what the medium answer is...
Very cool coverage of all steps to try this by myself, after 10 years of not writing any ADA line code :) Was used as base language to teach procedural programming in some French high-school. Planes produced in France are / were shipping ADA code as critical code for flight. Trading in the biggest bank company from here have / were actually got production code in ADA too.
Finally! The main “Tsoding” channel got a new video 🎉
(First 5 seconds I thought this was another video on Tsoding Daily channel lol)
Totally agree with the take about reading the source. People seem to think libraries are magic.
A funny aside, is that, among friends, we've been referring to reading the code as the "russian docs" xd
Interesting format of videos. Was listening while washing dishes and then Ada kinda reminded me on PL/SQL. I googled that, it turns out Oracle borrowed syntax from Ada.
ЦОДИНГ ЗАПОСТИЛ
ДЕНЬ ВОССТАНОВЛЕН
СПЕЦИФИКЛИ
I just finished a course on Safety and Security and our labs were in Ada. Nice to see something in the obscure lang
I was introduced to Ada while in college in the 1990s. I really liked it and it has always held a special place in my heart. Unfortunately, it wasn't the language that was going to get my career started. I appreciate this video.
Thanks for another great video! Made me curious about exploring Pascal again. Turns out Pascal has quite exactly those same features with indexing and enumerations! I knew about those enumerations, but I wasn't sure about the array indexing aspect. Now I tried it on linux with freepascal. Ada en Pascal are very similar here too. Actually great, also from memory safety perspective.
Somehow, many years of having to work in someone else's existing Delphi code (which is really just a Pascal dialect) never invited me to explore every aspect of the language myself. Especially also because none of those good things where ever in all that code. And I have always been more a C family languages guy and worked with C# too.
Maybe Ada is more memory safe on other aspects as well, or the compiler does more checks, I don't know. But both Pascal and Ada deserve actual credits I think.
Sometimes I feel I am tired of software. I think I will just give up or something, then I watch Tsoding and I remember why I always loved programming.
You are a legend. I watch your videos since back Haskell times.
I don't have the time for the twitch stuff but I wish I did. Keep being awesome, and thank you. ❤
Ps. Another video about Ada would be quite cool.
As a FPGA engineer used to VHDL this language hits right home!
vhdl sucks and its not ergonomic and its absent sensitivity to letter case is retarded
VHDL mentioned, auto like 🦅🦅🦅
Not surprising. One of the few areas where Ada still has a large (for the industry) following is embedded programming, which is a next-door neighbor to FPGA programming.
That's because VHDL was actually based on ADA. ADA was already intended to be a replacement for C in the late 70's. It had military roots.. just like VHDL.
Sweet! Someone else really, really likes how array index types work in Ada. It was starting to feel a little lonely.
*Jeezy Voice: Welcome back, welcome back
This got a 1990s elementary "The Learner Will" video mixed with PBS documentary vibe. You got a spicy bag o talent.
Really enjoyed the video 😊
Finally, tsoding remembered the password, and started uploading a new video
If I had a $ for every language that was suposed to replace C....
It has replaced C for me and it is so much better that words would not suffice. Truly I say to you that Ada is the best language for embedded, memory registers/drivers and network protocols.
I think you might get 20-50$ for those
The point of the NSA recommendation (and also the general one from the White House) is that C (and C++ to certain extend) has been problematic due to bugs and memory safety, while that could be a skill issue of the programmers, we still have those problems since several decades because there isn't a good solution for them due to the nature of the languages.
What they are saying is more nuanced, like "if this program can be written in a memory safe language, do it that way" which should be the first consideration in many areas where cybersecurity is critical. And even they say that are areas where C cannot be replaced like avionic or satellite systems, where the garbage collector nature could be a great problem.
At the end their intention is not to replace C but only using it in areas were its capabilities are a requirement.
@@EduardoEscarez So use a language written in c instead of c itself. Checks out.
I replaced both C and C++ with Ada in 2005.
Finally a coding video that I can watch. I just found your channel. Keep the good work! Exta bonus: he codes in Emacs! 😀
Ada is a really cool language. I hope I have some time to check it out. Zig is similar to Ada in how they interop with c. It’s interesting how they are focusing on the tool chain and building things from the ground up while supporting interop with c from the beginning.
Indices are natural part of abstract container semantics. While iterator (pointer) invalidation rules are a detail of some specific implementation.
I'm simple man, see Ada - I press like. Good job for spreading a word about this awesome language.
"If the boss seems difficult you are approaching it incorrectly." 😂
ahh, finally someone said about how indexes are similar to pointer (and why it's basically a way to circumvent the borrow checker lol)
We have too many people in government talking about things they don't know about. I cringed every time they used the word "algorithm" when questioning that tiktok guy. Like that was their big word for the month.
Fascinating video. Thanks.
Tsoding is back let's go
35:17 ...and that will actually work...almost...
I love the way you present.
I came for copper, and I found gold - your works are indeed gold to me. IMHO.
Array and enum integration is something I miss dearly in most languages.
Oracle PL/SQL was designed from ADA, including the .pls and .plb analog file extensions
I am computer language agnostic. My personal favorate language was PL/I on an IBM s/370 mainframe. C/C++ is a decent language to me, but I prefer something a bit more high level.
Oh Man. I was looking this channel the other day wondering if you would revive this channel besides the daily one
I did my masters degree about a subset of Ada, called SPARK, that was being promoted for use in critical systems and other safety critical stuff. I started a PhD about formal verification of concurrency using SPARK but I gave up on the PhD half way through.
That being said... I think that a LOT of people that are in the safety critical domain use it but for everyday development? Most people don't even know the language...
Ada is actually quite cool for that use case.
You're right on both fronts, but does the fact "most people" don't know it count? I mean, see all the hype with Rust, while, in effect, almost nobody knows the language either. It's not a valid point in itself. When you don't know something, you learn. Actually, having to spend a little more time learning a language before using it is IMO a strong point rather than a weakness. C has been used and abused by thousands of people who never cared to learn it properly (and there's probably only a few % of C developers who really master it.) Probably because it was so ubiquitous and looked so simple on the surface.
24:23 with “Hello from AdaglBlendFunc”. I like the casual example of an out of bounds read achieved in an approved “safe” language. PS Thanks for an interesting overview of Ada. It’s turned out to be quite a curious creature.
i didnt expect i would enjoy this long video. you did a great job, the third owner of the channel.
Hey man, you're really cool.
I am watching the streams on twitch where you were developing Ada, and I am glad you finished it on stream.
I really enjoy watching you program and seeing how you think, you're like the programmer I aspire to be really.
Thanks for the vids and all the work.
Listening to anything the NSA has to say is quite funny if you care about security and privacy.
That said, Ada is a good one in the list - modern Pascal is not too bad either. For the rest of the list, like Go, Java or Ruby, while certainly they avoid directly tinkering with memory, which may look safer, they have a host of other potential issues that, from a security POV, make them a joke.
Ada is pretty good though, and it has standards. Which, apart from the satisfaction, means that anyone can write compilers for it and compile Ada code correctly. Try writing a Rust compiler yourself, that is going to compile all existing Rust code base correctly, and call me: they don't have a full official spec yet, and so the "spec" is still the compiler itself. Which essentially prevents anyone from reimplementing a compliant compiler from scratch.
I learned Ada in the early nineties. I loved it.
17:39
So, this is an interesting take in many ways, but are you considering the possibility of making applications by making code in safe languages? I don't think it is a justified argument to draw that, from the fact we use past-written C/C++ code to make useful things, it implies that it "vanishes" the safety benefits of safe languages.
Thank you so much for the time you have taken to make this video. This is the second time I muster up the courage to reach out to you regarding which path to take in the field of programming languages. Perhaps you or one of the readers could guide me, especially since I don't have anyone else in my area to ask for advice. Towards the end of the video, you mentioned integrating Ada into a resume to land a job in the programming industry. I believe you answered no, and truthfully, I am unsure which language to turn to for this purpose. I'd like to express my interest in programming by learning a language that would allow me to secure a remote job. Thank you very much. I understand you may not have the time to reply personally, but if anyone from the community could offer guidance, I would be immensely grateful.
ADA has lots of features integrated into it. At uni I used it to program realtime systems
You can have a look at the secure subset of Ada called SPARK, which implements design by contract. A great concept that more languages should adopt.
I'm only 3 days in, and you built that in 20 days?! That's actually amazing!
aLl you need is C and sometimes some assembly is required
That game looks a bit like a fun version of that Adventure game on the Atari 2600! Awesome stuff man, I love your commitment to digging your heels in and just grabbing any old language by its short and curlies!
It’s amazing how I went this exact same route when I looked into ADA. And ADA tasks are probably the coolest native concurrency implementations. Eons before c++14. It’s equally relevant running on bare metal, in RT controllers and on huge hardware like z/Series. That in itself is pretty fascinating.
Also , if we ever decide to evaporate Pyongyang, chances are that ADA firmware will be driving that train. P.s. I dunno why autocorrect wants ada in caps or in lowercase but I’m too lazy to fix it
Wow, it's so goddam different from usual streams. Nice takes on the lang, a lot of interesting info
очень крутой видос получился.
thanks bro! the edit is concise and captivating.
you really help me get my motivation going. you see, i think i started burning out at work around a year ago, i took a couple of months off work, and tried to recover, but ever since i've been having troubles keeping myself motivated at programming (even my own side projects)
so i wanted you to know: i appreciate the work that you do like making content and editing videos, it helps me getting through these tough couple of months. thank you
I've been enjoying your stream and the Tsoding daily channel, but this long form edited style really fucking works nice man! I came across Ada when working for a company that provided code analysis tools for safety critical applications. Ada seemed to be a relevant choice in these areas.
One of the greatest videos from you. It’s really remarkable .
more. we want more of this.
If a video title is a yes-or-no question, the answer is always no.
A new "main" channel video. 2024 is a good year AYAYA
So in Ada arrays can be mapped by ranges and enumerators (*like in pascal*) :) a lot of interesting things are present in pascal that should be everywhere like native bit sets for enumerators etc..., curious about the concurrency and other things of the language tho, will look into it!
the bit at 25:00 about bindings stands out as maybe the most important part of this video
mista zozing is cooking
Your game is very beautiful in concept and to the eye as well.
Who should learn Ada? Embedded developers and electrical engineers. Ada is the go to if you work in aviation or military applications, at least here in EU. I think it is also heavily used in automotive but I don't have concrete data to back my claim.
I was so confused, I was sure I was already subbed! Hello again!
Some of the expressiveness at the end reminds me of Apple's new language Pkl. For those types that are ranges, do you need to use them like enumerations or can you perform arithmetic? And if you can perform arithmetic, how does the type behave if it overflows? Maybe I just need to read the docs... Fascinating video, thanks for taking the effort here to break this all down.
I ask how they behave because I think it relates strongly to a lot of the "try_" style functions in Rust, and the complexity that seems to drive downstream to a dev.
It's really fascinating that Ada seems to take this route of add complexity to language "words" to improve relationship expression between them instead of driving that to the runtime of the program. I wonder if so many languages seem to have a small set of source symbols because they are developed by English-speaking workers as opposed to German or Chinese. Where a single word is as expressive as a whole sentence in English.
Now this guy is what I call a professional good programmer ^-^
I thought the teaser line was "Will Ada replace C/C++ in Tsoding's programming stream for more than just one project?"
damn that game looks amazing! its very aesthetically pleasing and mechanically interesting, which Im not going to lie, is not usually a strong point of a lot of amazing programmers lol.
It's uncanny how the music and a very few added details give a great vibe to one of the most basic graphics you can get.
It would be fun (and probably a lot of work) to write simple games or engines in a niche language that wasn't designed for it. For example, using Julia, or Haskell, R or even Brainfuck. Depending on the level of crazy you want.
17:17 what i really want is a new standard for FFI that isn’t limited by C’s weak type system and allows different languages to communicate with each other what they know about the code and what they don’t. i think it should probably allow further specification than what the language the code was written in allows, kind of like typescript specification files for js libraries, so assuming we trust the specification, you can write code in most other languages using only safe primitives linking against it
We kinda do something like that. Well try to avoid the need for it by separating algorithm and datastructure implementation and program against either abatractions or streams of values sorta, but how ron???
@@ron5948 who is "we" in this case? this is not something I've heard of. i'm also not sure how separating algorithm and datastructure implementation would help avoiding the need for it
Are people also asking “will Rust replace C/C++”?
Ummm, yes? Was this a trick question?
I learned ada in the university, and appart from being a pain in the ass when you are learning, Right now I missed it a little bit, now I'm learning rust and swift... I will be happy if ada grows and is more usable.
I started my studies in CS with Pascal, and now I can again see why I loved it. Simple, fast, typed etc. Ada is the grandfather/mother of Pascal. it is true that you debug these types of systems faster and documentation is mostly automatic.
PS: Pascal also has indexes that can start from negative up to positive. You specify loop with "to" or "downto".
It's the reverse: Ada came a decade after Pascal!...
@@gautierdemontmollin3753 You are correct. I am getting old. I am confusing ADA with ALGOL. They start with A and it went south from there. Pascal is refered to as an ALgol-based language. Thanks for the correct
Love this kind of content!❤
It would be awesome if you could make courses Tsoding!
I didnt even notice this is the other channel, finally you uploaded again! 🤣
Holly shit, this is an amazing video!!! I really liked the style and how you approach the demo! I'm wondering if you will upload the ada session in entirity on your daily channel, really loking forward in watching it!!!! Thanks!!