I don't know the details. But nowadays gdb supports DAP, as any other debugger: https://www.sourceware.org/gdb/current/onlinedocs/gdb.html/D...
Are you talking about this, or the old https://www.sourceware.org/gdb/current/onlinedocs/gdb.html/G... ?
119 karma · joined November 5, 2019
I don't know the details. But nowadays gdb supports DAP, as any other debugger: https://www.sourceware.org/gdb/current/onlinedocs/gdb.html/D...
Are you talking about this, or the old https://www.sourceware.org/gdb/current/onlinedocs/gdb.html/G... ?
Honestly, all the distributions "just work" and are "stable" (i.e. they don't crash and corrupt your data). You could just pick up a random one. You will find some specific problems affecting you, sure... you will report (or even fix) them and, after a while, the distro will be perfect for you (it will still have some problems, but none affecting you because you have reported/fixed them).
The main thing about RHEL is that it's "stable" (i.e. it doesn't change) over a crazy long period of time. If you are selling software, the lack of change makes it easy to support. If you are buying software, it's a good platform to use because developers support it.
RHEL being historically the most popular "doesn't change" distro, I have never seen a big point in using other. Nowadays your vendor is probably also supporting Ubuntu, though. SUSE? A lot of them will support it, but not all. As long as the vendors you use support the distro you use it doesn't matter, I guess.
In any case glibc uses NSS, so what glibc does depends on the configuration. It may well just forward the request to systemd-resolved.
In fact, I have the same problem with the NES. For me the SNES is exactly the sweet spot.
printf("You have %d items of type %s.\n", itemCount, itemType.c_str());
When I could do this: std::println("You have {} items of type {}.", itemCount, itemType);
https://en.cppreference.com/w/cpp/io/printNow, to give a concrete example. There was a C++ PR introducing an interface taking an argument of type int representing a duration. I suggested using std::chrono::duration (https://en.cppreference.com/w/cpp/chrono/duration), and I was overruled on the basis that "an int is simpler". To have context if you are not too familiar with C++:
- std::chrono::duration is part of the C++ standard library
- It's a wrapper on top of an arithmetic type just giving it "duration" meaning. It's of the same size as the wrapped arithmetic type.
- Yes, you can argue it's more complex since it adds a bunch of templated code on top of a language built-in type.
I'm going to guess that's not what you had in mind with your "Simple > Complex" advise. If so, that's what happens with any advice, even with simple one liners: somebody will take it to justify some crazy decision.
- "Wants" "stable", i.e. the default gcc
- Doesn't care what Boost version is used
- Pays the developer
The developer
- Wants the latest toolchain
- Wants the latest Boost
- Makes money
The developer
- Accepts using an old compiler because Boost keeps compatibility with it
- Does not pay Boost developers for it
There is no single entity that wants old compiler (other than to satisfy others) and new Boost.
People point out RedHat provide newer compilers (and newer patched C++ standard libraries depending on the default one!) and he says "It's not us, it's our customers. And no, they won't use any compiler which isn't the system default".
Either you only use the system defaults, and that includes the old Boost included with RHEL, or you don't. I guess he includes a private Boost copy as part of his project. Well, include a private GCC too then. A dependency is a dependency
Those customers have silly requirements for no reason. The whole world shouldn't make efforts to accommodate them.
I am going to bet those customers are going to argue about "stability". All this comes from people reading "stable" as "rock solid, never crashes, always works as expected" when in the case of RHEL it actually means "it doesn't change, no new bugs introduced, and you can relly on the old bugs staying there". Those customers just need educating.
Last I remember, the lifetime profile stuff was there, but there was still no way to add your own annotations. For some reason, I didn't hear too much about any of this, it was
- clang is working on it
- clang is working on it
- clang is working on it
- Visual Studio has it
- clang is working on it
- Silence
gcc still has nothing, right?
But sure, you can still make the error with expiclit types.
But "Herb Sutter says you should use it, he even gave it a catchy name/acronym" is as good as it gets. And he does so AFAIK in the same place he created the "Almost Always Auto" name: https://herbsutter.com/2013/08/12/gotw-94-solution-aaa-style...
Notice that he says "the main reasons to declare variables using auto are for correctness, performance, maintainability, and robustness—and, yes, convenience, but that’s in last place on the list.". He is arguing literally the opposite of what you do, that using auto avoids bugs ("for correctness").
I'm not going to argue in favour or against "Almost Always Auto". But I see no problem calling it "Modern C++".
* Herb Sutter being the convener of ISO WG21
All three major C++ standard library implementations have an option to enable assertion checks in both std::vector and std::span operator[]. Enable them unless you are in such a resource limited environment that you can't afford the checks (unlikely). The only reason the standard doesn't require the checks is to allow C++ to be usable in those resource limited environments. You could argue the checks should be enabled by default, but that's not something for the standard to decide, complain to your standard library vendor.
It's even better if your language has a way to express "the return value points to data from the input argument, so it's a compile error to pass a rvalue string to this function". The second we got a language able to do that, usable everywhere where C++ is, (yes, that one) the incapacity of C++ to express this became "a problem with C++". Our expectations have just increased.
Surely it can be catched via static analysis if you suppose the common case that the return value is a function of the argument, and not pointing to some static global data. But you will get false positives when somebody does the uncommon case. There is a lack of expressiveness in C++ here.
- It's a synchronous interface. Things like getaddrinfo_a are barely better. It has forced people to do stuff like https://c-ares.org/ for ages, which has suffered from "is not _the_ path" issues for as long
- It's a less featured interface than, for example, https://wiki.freedesktop.org/www/Software/systemd/writing-re...
The other day Duolingo did show me you can say "и A и B" ("и" being "and") to say "both A and B". Start a sentence with "and", a conjunction, without anything before to... "conjunt"... I still can't parse it without raising an exception.
Since you are supposed to use liburing, not the kernel interface directly, I guess somebody could add multithreading "support" to it.
Or at least add documentation/examples of the most common/performant options: https://github.com/shuveb/loti/issues/4
AFAIR Windows IOCP handles multithreading by:
- Handling locking at kernel level, the syscall is thread safe
- Making it LIFO, to keep things in the same threads, to have a decent cache behaviour.
It's as simple as it gets.