This is the exact level of details I was looking for. I'm fairly experienced with deep learning and pytorch and don't want to see them built from scratch. I found Andrej's materials too low level and I tend to get lost in the weeds. This is not a criticism but just a comment for someone in a similar situation as I'm.
I agree with you. But what is the sentiment in the C++ community? I mean, other languages are profiting tremendously from package managers. In C++ things are going the other way - taking public libraries and putting in std (fmt, chrono, and all that).
Some of us think that ISO has had its time, C++ is getting this way because only those willing to travel and putting in the time to advocate for voting on their papers, are the ones driving this kind of features.
Additionally, contrary to other languages evolution process, ISO doesn't require that papers come with an implementation, hence why you get stuff approved, that only after the fact is proven not having been a good idea after all.
Coming back to your point, there is a growing community that thinks, that exactly because of this, it is about time to adopt at very least, the two biggest package managers, and there is now a C++ tooling workgroup.
However there is also another majority, from those that bother going to ISO, that think everything has to be shipped on std.
C++ programmer and educator here. This (volume 3) is well organized good beginner level teaching material. You probably know most of it already.
I was looking for range-based for loop, std::array and std::span and happy to see that they are all there.
Because this book relates to HPC, I'd add a few things: Return Value Optimization, move semantics, and in the recursive function section a note about Tail Call Optimization.
As a beginner level material I can highly recommend it.
I am not the person you asked the question to, but my recommendation would be;
1) Discovering Modern C++: An Intensive Course for Scientists, Engineers, and Programmers by Peter Gottschling - Not too thick and focuses on how to program in the language.
2) Software Architecture with C++: Design modern systems using effective architecture concepts, design patterns, and techniques with C++20 by Adrian Ostrowski et al. - Shows how to use C++ in the modern way/ecosystems i.e. with CI/CD, Microservices etc.
Optional but highly recommended;
a) Scientific and Engineering C++: An Introduction with Advanced Techniques and Examples by Barton & Nackman - Old pre-Modern C++ book which pioneered many of the techniques which have now become common. One of the best for learning C++ design.
The use of ``this Self&& self`` in the ``at()`` method can appear to be an overkill. But this approach actually covers many scenarios and make the code much smaller. For details, you can read:
I think you missed the point. The point isn't that these features don't have a purpose. The point is rather, at every line of code you have many choices that you arguably shouldn't need. Should I use a raw pointer or a unique_ptr or a smart_ptr. Do I need to call make_shared here or can I do something else? Should I call std::move here or not? Should pass by value or pointer or const pointer, or reference or const reference? And on and on, every line is a foot gun.
I get why it's that way, backward compatibility. The problem is, the original way, the path of least resistance, is now effectively deprecated, but it's the official syntax.
char* s = malloc(size);
is considered bad code. I get why. But, in a "good language" the default would do the right thing and I'd only escape into bad code by extra work so that all the easiest code to write did the right thing by default.
C++ is trying to fix all that old bad code by coding standards and linters but I don't want to have to type a bunch of boilerplate I need to memorize to do the right thing. I want the right thing to be the most obvious, no brain cells required path.