1. 100
    On "Safe" C++ c++ rant izzys.casa
    1. 41

      Absolute must read. Previously, on Lobsters there was discussion about feminist philosophy in the context of programming language design & implementation. Ideas surrounding the cultural context that langdev exists in have been rattling around in my brain for a while, especially after Evan Czaplicki’s talk on The Economics of Programming Languages. It is exceptionally rare to find engineers that are well versed in langdev, let alone this in tune with its societal backdrop. Sadly, it is excruciatingly obvious that coming to this understanding was painful to the author and I wish them and anyone else pushing C++ forward the best.

      1. 32

        I hadn’t thought of it this way until now (thanks Izzy), but I do see a “toxic masculinity” in the way the C++ community seems to reward solutions that feel almost masochistically clever. Like, it’s way more macho to implement a fully type-checked format string system with a hellscape of templates, rather than just give your language procedural macros so you can do it in a straightforward manner.

        There’s also the “seat belts are for wusses” attitude that keeps coming up. Like if you accidentally return a reference to a temporary because of violating some obscure rule I forgot five minutes after reading it, you don’t deserve a compiler error, you should just take the blame for your screwup. It’s like the anti-humility language.

        1. 17

          Yes, and it’s not just C++, you can see this attitude in a bunch of languages. John Blow’s still unreleased language Jai is explicitly “designed for good programmers”.

          Drew DeVault’s Hare language used to have “trust the programmer” among its design principles, but has since changed to “trust the programmer, but not by default”, which is a much better idea in my opinion. They have also added basically all the “low hanging fruit” memory safety features, so while there is no lifetime safety you at least get bounds checks and such.

          1. 6

            John Blow’s still unreleased language Jai is explicitly “designed for good programmers”.

            Casey Muratori once had what I think was an excellent take on this:

            • I don’t need features (or coding rules) to correct mistakes I personally don’t make.
            • do need features (or coding rules) to correct mistakes I personally do make.

            Explicitly taking into account the fact that different programmers make different mistakes, even when they are equally good. So yeah, designing a language for whatever your idea of a “good programmer” is, is probably misguided. But I think Blow’s mistake here is in communication more than in design. He’s really designing the language for himself and a small set of peers. This is more likely to yield a language that is very good for them, regardless of how good it will end up for the world at large. Which is, ultimately, Jai’s real goal.

            1. 4

              Everyone is designing for a target audience, and trying to provide power that that audience will find useful, while guarding against mistakes that audience is likely to make.

              Everyone mis-estimates everyone in their target audience besides themselves, to some extent.

              If you design to a target audience that includes yourself, you at least have a chance of producing something useful to yourself, and a further chance of it also being useful to others (though of course neither is anything close to a guarantee).

              If you design to a target audience of “people who aren’t as smart as me”, you get a turd, no matter how well-intentioned, because you’re excluding your most valuable data point.

              If you try to distance yourself all the way and make something “safe” for “the world at large”, you actually don’t have a design at all, or at least not one that’s suitable for humans, because you’ve excluded everything you know about what it is to be human from your conception of the user.

        2. 26

          There’s a lot in here, and I agree with much of it, and it makes me glad I refuse to join Slack (I read their privacy policy and T&Cs). And I’m really glad I didn’t subscribe to the SG21 list (I think their proposal is an absolute disaster but I have no desire to see how it was made), but:

          It’s as if the paper is giving you a wink and a nudge that no one in their right mind would ever work in the false language of spreadsheets, but look at how complicated we made Excel that it can actually do these things 🤭.

          A bit of context here. One of the authors of the Build Systems A La Carte was Simon Peyton Jones. Simon is best known for his contributions to Haskell, including being lead developer of the Glasgow Haskell Compiler. He spent his last few years at Microsoft working on Excel. This wasn’t a subtle nod, he is on record as saying that Excel is the most widely used programming language, with around a billion people working on it.

          I think the other text here is unkind to Simon, who has been very positive about PL research using spreadsheets as a path to enormous impact.

          1. 3

            Build Systems A La Carte

            The one paper that gave me hope about build systems. That I might one day actually enjoy using one, even if I have to build it myself. My printed copy is still sitting on my bedroom.

            1. 8

              For what it’s worth, about a year (or two? time flies) when I returned to that paper, the end result was realizing that buck2 seemed like the way forward.

              I think meta hasn’t done a great job of making it truly usable for new folks, but if you’re already familiar with bazel or buck, it’s pretty good.

          2. 24

            I had an interview earlier this afternoon for a C++ job, the final round for a company I’m thrilled about, where I was told it’s extremely rare that young people are as passionate about specifically C++ as I am (I’m 24). This isn’t the first time I’ve gotten that feedback in an interview. In the final round at another company, I was told by a project manager that he had never seen someone say they want to work in C++ specifically more than any other language (didn’t even constrain that by an age demographic).

            This article made me the most pessimistic about C++ I think I’ve ever been since I first encountered a linker error years ago.

            1. 17

              I’m sorry if this made you pessimistic. I’ve spent 15+ years writing C++, 10 actively participating in the standards orbit. The thing is, you don’t need to be in the standard committee’s orbit, you can forge your own path. I will most likely keep writing C++, but it’s the pedantic arguments on the committee. The wrong people in the right place at the right time making the wrong decisions even when the correct solution is right there in front of them.

              Keep in mind, you can always write C++ and ignore the committee. It’ll suck, but it’s very doable.

              EDIT: Checked your profile and saw your site and all your C++ projects. You’re gonna be totally OK :)

              1. 3

                This article made me the most pessimistic about C++ I think I’ve ever been since I first encountered a linker error years ago.

                Linker errors fucked me up when I had to write C++ during a university exchange back in the day. Couldn’t really figure out where to get the documentation for this in the first place.

                1. 3

                  This article made me the most pessimistic about C++

                  Don’t be, extreme opinions (whether positive or negative) are rarely the correct ones, when it come to complex matters. The truth is always somewhere in the middle and more nuanced. And this is as extreme anti-C++ (both language and people working on it), as you will probably ever see.

                  1. 43

                    We (I am a white dude myself) like to wonder why so few women and marginalized groups want to hang out with us. We are nice and friendly guys that value rational thought, and that are open to new ideas.

                    If somebody bothers to tell us about the poor experience they had in our communities (and most people will just walk away in silence), we are quick to discount that input because it is so different from our own. So it must be a misunderstanding, or somebody having a bad day, or a special situation, or the reporters fault, or just an extreme opinion that is “anti C++”.

                    We wont improve as a community by ignoring the few voices that had a bad experience and still care enough to report the issues they had.

                    1. 25

                      The truth is always somewhere in the middle and more nuanced.

                      I would include this very statement in the bunch: there are lots of subjects, including controversial ones, where the correct answer is pretty much one-sided and mostly void of nuance. Most importantly though, that statement is a dangerous heuristic: it quickly encourages you to ignore or downplay strong evidence (one way or the other), and stops you from forming an actual opinion.

                      And this is as extreme anti-C++ […] as you will probably ever see.

                      Have you heard of the C++ FQA? It’s the most scathing indictment of the language I know of, I learned a ton from it. It’s a bit dated (from before C++11), but I would say probably still relevant today.

                      1. 24

                        I disagree, reading the article it feels like the author has a lot of passion for C++. She mentions there are still nice people in the C++ committee and says she will continue programming C++ after this.

                        A large portion of programmers simply avoids using C++ unless they are forced to, and don’t care enough about it to write a long rant. That’s IMO much more anti-C++ then this article.

                    2. 23

                      C++ is a disaster. I had some hopes 10 (?) years ago when gsl started to shake things up, but it all came out to nothing (and ranges). Almost everything that has happened since just makes this mining field more dangerous.

                      Sadly many people don’t care about safety, but only about “efficiency”. “You can take this UB from my cold hands…”. I have seen people fighting tooth and nail against security/invalid input fixes in quite a few /usr/lib/ that we’re all linking into our apps. This what makes it possible to send a picture and take over your phone. How is it still acceptable is beyond my understanding.

                      Hear hear about embed. Such a shame in 2024.

                      Citadel? Ouch. Don’t get me wrong: I’d join in a heartbeat but I wouldn’t pretend about my motivation. Also if you couldn’t “fix” c++ in 22 years while being part of the msvc, then maybe c++ needs a new leadership.

                      Great rant. We need more authentic voices and less corpspeak.

                      1. 12

                        Sadly many people don’t care about safety, but only about “efficiency”. “You can take this UB from my cold hands…”.

                        Yes, definitely. One of the main points in this debate is whether to have array bounds checks by default. For the longest time, the answer from C++ folks was a resounding “No, of course not!”. But they’re very slowly coming around to it: https://chandlerc.blog/posts/2024/11/story-time-bounds-checking/

                        So yeah, 0.3%. That’s roughly the performance gain that we got by not having bounds checks by default. On the other hand of this tradeoff is the fact that out-of-bounds accesses are among the leading cause of memory unsafety vulnerabilities, second only maybe to use-after-free.

                        1. 11

                          What’s interesting, I have seen engineering community willing to pay a performance cost in other scenarios. Snowden made encrypted internal traffic ok overnight (I recall ~1% cpu overhead over all google fleet at the time). Also “everyone” has decided that https features are more valuable than overhead. But hardened libc++ in production? Blasphemy.

                          1. 10

                            Yep, we pay performance for safety or security all the time. ASLR, stack canaries, control flow integrity etc. would all be “unnecessary” if we could just trust the programmers to stop messing up. But we gladly play that performance cost for the extra protection.

                            I think part of the reason is that whether to e.g. apply ASLR is usually a decision made by whoever is deploying the software, not the one developing the software. Programmers themselves tend to have a bunch of hubris and find it hard to imagine themselves screwing up, so they’ll often not make use of safety features at their disposal.

                      2. 19

                        As much as it obviously doesn’t technically have to be the case, I think that the author is right in her assessment that C++ will, at this rate, go the way of the COBOL dodo in a decade or two. Any momentum the language builds up to improve is destroyed before being allowed to bloom by the abusive and dogmatic narcissism that’s held its development captive for a long time now. It’s a doom spiral that could possibly some day change course, but is obviously unlikely to anytime soon.

                        1. 13

                          As it should. C++ is a horrible tarpit, supported by legacy, egos (see some of the examples from this post!) and a combination of Stockholm syndrome and unwillingness to expand one’s horizon.

                          1. 6

                            I do not thunk COBOL is a good case study: Companies get surprisingly nimble when it gets just a tiny bit harder to sell their product. Be prepared for emergency meetings as soon as sales people have to show a memory safety roadmap.

                          2. 16

                            Legendary post.

                            I was surprised when I saw quuxplusone.github.io as the link target for Arthur O’Dwyer, because I see that site get posted pretty often. Should reconsider that.

                            Not much else to say except “la brea tarballs” was hilarious and I’m pretty sure “cosmopolitan” isn’t a dogwhistle (“I chose the name because I like the idea of having the freedom to write software without restrictions that transcends traditional boundaries.”, says the original) because the gap between the dogwhistle and the actual meaning of the word “cosmopolitan” seems so small to me as to make it difficult to use the latter while avoiding the appearance of using the former.

                            1. 31

                              Regarding “Cosmopolitan,” it’s worth noting that Justine has another project (also mentioned in a footnote of this blog post) called APE, another dogwhistle, though this time a racist one rather than an antisemitic one. As the post notes, Tunney has generally done a good job of eliminating much of the recorded history of her own prior bigotry, but some records remain. She’s promoted Curtis Yarvin, who himself has advocated in favor of slavery and argued that whites are biologically superior to non-whites.

                              1. 22

                                Justine’s history might not be well known, but she will still fairly regularly post unsubtly neoreactionary comments on HN, so I don’t get people saying she’s hiding it or something.

                                1. 19

                                  Most dog whistles you see are from people who don’t do a very good job at hiding their ideology, I think many people treat it as more of a “meme”. Plenty of obviously reactionary people who e.g put the numbers 14 and 88 into tweets. Honestly, I think part of the game for them is for people to point out the dog whistle so that they can act indignant and start an argument about how “the left is so easily triggered” by “normal everyday things”.

                                  I am not saying here that these project names from Justine are dog whistles, I don’t know much about her. You’re probably a better judge than me, having paid attention to her and e.g her comments on HN. I am saying that someone who’s being “unsubtle neoreactionary” is exactly the kind of person who I’d expect to use dog whistles.

                                  1. 10

                                    Oh, I fully agree, and share the suspicion of cosmopolitan and ape as dog whistles. I just wanted to point out other evidence for her beliefs and why it isn’t just historical or something she has disavowed and moved on from. Both the posted article and the parent comment made it seems so IMO.

                                2. 3

                                  That’s unfortunate. Thanks for the information.

                                3. 28

                                  For what it’s worth, I also believe cosmopolitan to be a dog whistle. In other situations, I would give it the benefit of the doubt, but not this one.

                                  1. 12

                                    That part was so disappointing for me to read, especially after seeing other people corroborate it. She (along with Isabella Muerte) has been a huge inspiration for me for years.

                                    1. 4

                                      I concur with folks here that it is a dogwhistle. I wouldn’t believe that absent of all the pre-existing context around Tunney – but with all that in mind it’s hard to not come to that conclusion.

                                    2. 16

                                      I wish we had more oral histories like this of technology. It’s epic.

                                      1. 15

                                        This rant is well timed for me because I have one of my own, please forgive me. :) I started using C++ professionally when it was only implemented by CFront. I still write a bit, mostly for embedded hobby stuff, but I’ve been stuck at about C++03. This week I decided to finally take some days to look at what happened in the last 20 years.

                                        What a nightmare. For every one straightforward useful thing like std::span, it seems like there are three more half-baked ideas put in C++(N) that don’t quite work and get half-baked patches in C++(N+3). Layers of hacks on hacks (SFINAE is clever, but too obscure, so now we have concepts, or at least part of it, but let’s keep trying). Stuff like <format> and ranges, where the stdlib adopted enough of the idea to look like it accomplished something, but missing so much that I don’t see why you wouldn’t just use the external library that inspired it instead.

                                        Sorry if I’m misstating any of the above. What I’ve learned is that it’s all much too abstruse, incoherent, and bizarre to be worth understanding properly. But thanks to this exercise I’m pretty sure I’m never going to try again!

                                        And what really blows my mind is that, despite all these years of creating a deluge of confusing nonsense, it still doesn’t have the most basic memory safety. In C++23, this code generates a warning. Unbelievable.

                                        int* wtf() {
                                            int x { 42 };
                                            return &x;
                                        }
                                        
                                        1. 12

                                          Sort of similarly, I learnt C++ in the mid 90s when templates were new and pretty rarely used. After a few years ill-health crashed me out of the industry, but like you recently I thought it was time to try to catch up, and .. oh god, what a mess.

                                          I’ve spent the last week or so reading rust docs, though admittedly not actually trying to write any code yet. From what I’ve seen it think it will be easier for me to learn rust from scratch than to try to catch up with C++, and probably much more pleasant!

                                          1. 21

                                            I’ve learned enough Rust to get useful work done, and I’m even thinking of switching to it for the embedded stuff. After this week, I’m pretty sure you’re right. In fact, even stronger than that, I feel like Rust is “a thing” that you can actually learn, whereas C++ is a giant ever-growing bag of hacks and edge cases that you’ll never feel confident of.

                                            1. 8

                                              This is exactly my experience too. I got started with C++11, but on a codebase with a lot of C++98 idioms in it which I dutifully modernized. Over the years I moved through different projects and used C++14, then C++17. While there was always some new stuff that was genuinely nice to use, there was also a lot of weird janky crap and it never felt like a coherent design.

                                              Rust has a ton of complexity too, make no mistake. But I felt confident in it after a year or so and like I actually knew the language, which is not a point I ever reached with C++.

                                              1. 15

                                                I think the trick with Rust is that even though it might take a long time to learn all of it, day to day you can get by with learning things piece meal as you go. The defaults make it so that it’s harder to shoot yourself in the foot, the strictness of the syntax make it so that using a feature by accident results in a compile error, and the compiler tries to treat every compiler error as a teaching opportunity, where it explains enough to point you in the right direction, either by giving you the vocabulary to search for or out right links to the docs with the full explanation. This is the opposite approach from a language like Scala and Python, where what you wrote might have a meaning, and even seem to work, but in practice might be doing something unexpected (like types with internal mutability in function defaults being effectively a singleton in Python).

                                          2. 2

                                            And what really blows my mind is that, despite all these years of creating a deluge of confusing nonsense, it still doesn’t have the most basic memory safety. In C++23, this code generates a warning. Unbelievable.

                                            int* wtf() {
                                                int x { 42 };
                                                return &x;
                                            }
                                            

                                            Sure, on the surface this looks idiotic. But, as I mentioned in the sibling comment, the truth is not on the surface and is more nuanced. The example you have shown is trivial and the compiler can detect the issue (which is why you are getting the warning). But consider this slightly more complicated case:

                                            int* wtf () {
                                              int x {42};
                                              return f (x);
                                            }
                                            
                                            // And in another translation unit we have:
                                            //
                                            int* f (const int& r)
                                            {
                                              return &r;
                                            }
                                            

                                            Now, when the compiler compiles wtf(), it doesn’t know what f() does so it cannot decide whether this code is safe or not. You can argue that a little bit of safety is better than no safety, and maybe you are right. But I personally feel that partially-safe is still unsafe.

                                            How could we possibly make the above more complex case safe? There are currently two main alternatives: let me call them the “Rust way” and the “Profiles way”.

                                            With the Rust way we would have to somehow pass the lifetime information around similar to Rust. So far (as far as I know), nobody figured out how to do this without essentially creating a new language with a new ABI that will have about as much difficultly inter-operating with existing C++ as Rust. Some think this is the way to go and maybe they are right, but I don’t think one can also dismiss the concerns of those who don’t share this opinion as not being valid (we still have to work with the tons of the C++ code out there, somehow).

                                            With the Profiles way you essentially rely on static analysis of your entire codebase. So in the above example, the compiler (or static analyzer) will see both wtf() and f() and will be able to figure out that your code is unsafe. While this can theoretically work and keep C++ the way it is (and maybe even be applied to the existing code), nobody has demonstrated that this approach can be implemented in practice and in a reasonable time. But again, I don’t think one can dismiss it because the potential benefits compared to the alternative are very substantial.

                                            1. 10

                                              I don’t think one can dismiss it because the potential benefits compared to the alternative are very substantial.

                                              So despite a decade in the standardization process and companies specializing in code analysis not coming up with a working solution and research coming up blank, we should not give up on the dream? Sounds like wishful thinking to me.

                                              Meanwhile rust has moved the bar and shown that end users do not need to suffer memory safety issues – and governments taking notice of that fact. I am not sure there is time to chase this particular dream.

                                              1. 2

                                                So despite a decade in the standardization process and companies specializing in code analysis not coming up with a working solution and research coming up blank, we should not give up on the dream?

                                                In my view, the “standardization process” only started seriously looking into safety in the past couple of years. And companies that specialize in code analysis did not have the ability to change the language to help solve the problem.

                                                I don’t know if we should be giving up on the dream, maybe we should. But in this case I don’t see much point in going the Rust way and creating a new language since we can just use Rust. In fact, I am sure you’ve seen the news that the Rust project is going to solve the C++ interoperability issue. So maybe we don’t need to force anyone to give up on anything: if Rust gains seamless C++ interoperability then there will be little reason for anyone to pursue the Profiles way.

                                                1. 2

                                                  companies that specialize in code analysis did not have the ability to change the language to help solve the problem.

                                                  The safety profiles proposal wants to be widely applicable to existing code, so it has similar limitations.

                                                  In fact, I am sure you’ve seen the news that the Rust project is going to solve the C++ interoperability issue.

                                                  I just doubt that will work out, just as I doubt safety profiles will be a thing.

                                                  You need a C++ compiler to extract the necessary information from C++ code and bolting a C++ compiler to the rust compiler is going to be as ugly as strapping a rust compiler onto a C++ compiler.

                                                  There is not even an argument to be made that rust will get safer by having a C++ compiler onto it.

                                              2. 7

                                                BTW, Rust lifetimes don’t exist in the ABI. Their existence is completely erased before code generation starts. This allows Rust to use lifetimes on existing C functions, or be compiled by a compiler without a borrow checker.

                                                1. 1

                                                  Yes, I am aware. But I believe Rust still saves some metadata about lifetimes in libraries. For C++ to do the same we would need to store similar metadata in .a/.so (and their equivalents on other platforms). It’s probably doable in .a and for .so we could invent import libraries like on Windows, but that would be a very disruptive change.

                                                  1. 6

                                                    I’m pretty sure Rust doesn’t store any lifetime information in compiled products.

                                                    You may be thinking about metadata for rlibs. These are equivalent of C++’s header files.

                                                    Rust is really completely ignorant about lifetimes in code generation. For example, there are unfixable issues with (unreleased) specialization in Rust, because the compiler can’t check new lifetime problems appearing during monomorphisation, since at that point they’ve been lost. Rust also can’t eagerly run destructors since that would make compiled code depend on lifetimes.

                                                    Borrow checker is just an optional static analyzer that can only approve or reject code, but can’t change it in any way.

                                                    There’s mrustc compiler that doesn’t support borrow checking, compiles Rust to C, and still can build the entire Rust-written Rust compiler correctly.

                                                    1. 3

                                                      Why bother? C++ has header files to inject library code into its users. Anything that needs to be in headers (whichbis a lot on C++) can not go through the binary ABI and is sneaked around that interface.

                                                      Lifetimes can just join the rest and get declared a “header only” thing.

                                                      1. 3

                                                        In C++, that meta would go to header files, not object files.

                                                        1. 2

                                                          Perhaps I am wrong, but I always thought the Rust compiler needs to see the function implementation in order to compute the lifetime metadata for its arguments and result. At least in the case where lifetimes are not spelled out explicitly. Or am I off the mark here and all rustc needs is to see the function signature?

                                                          1. 11

                                                            Only the signature! This is very important: Rust doesn’t infer lifetimes in signatures, they are always specified.

                                                            There’s lifetime elision rules, but they are a shorthand to write the explicit signature more concisely, they never look inside function’s body!

                                                            (*) like C++, there are some cases where the compiler needs to see the body of the function, and I think they are the same as in C++: inline functions, generics, macros. But lifetime in signatures in particular always specified, never inferred.

                                                            1. 3

                                                              I stand corrected then, thanks (and thanks to @fanf for the link).

                                                            2. 10

                                                              Lifetime elision is simpler than you might expect: it’s just based on the function signature, not its body.

                                                  2. 14

                                                    This was such a good read. I sympathise with the authors frustrations.

                                                    Wish I could do more, but I am just a random potato.

                                                    1. 13

                                                      I found the first half of the article worth reading on the balance but also rambly, and around the second “but this article is ACTUALLY about” I tuned out because I figured I’d gotten all there was to get.

                                                      (I also don’t find the zinger-laden style particularly good when talking about serious topics. I don’t mind anger, but if you’re going to call out people’s bad behavior maybe don’t throw in an aside implying that liking Go is a form of brain damage, ha ha, how funny.)

                                                      1. 31

                                                        maybe don’t throw in an aside implying that liking Go is a form of brain damage, ha ha, how funny.

                                                        Honestly, not my best moment. The decision to keep it in came down to a coin toss, and I was 7 days into writing the post with only 20 hours of sleep.

                                                        1. 15

                                                          It was the best post I’ve read this year. Yes of course way too long and rambly. But still the best thing I’ve read in a long time.

                                                          Important stuff.

                                                          Thank you.

                                                          1. [Comment removed by moderator pushcx: Don't dunk on people admitting fallibility.]

                                                        2. 4

                                                          There appears to be a bug in the CSS, which causes text selection to display incorrectly in light mode. The highlight colour is defined to be var(--select-light) but --select-light does not exist; I believe it ought to be --select-lite.

                                                          1. 6

                                                            Thanks for the heads up. I think you had tried to inform me on other platforms but it got lost in notifications. This should be fixed now :)

                                                            1. 5

                                                              can confirm it is fixed, thanks! i often use highlighted text to keep my place on longer reads and was a bit dismayed it didn’t seem to work so glad to see it now.

                                                              1. 2

                                                                Very sorry about that!

                                                          2. 4

                                                            Rust as an engine of pushing C++ to safety, sounds great to me!

                                                            1. 43

                                                              I think a key point Izzy is making here is that C++ as a project has a fundamentally safety-hostile culture, both in terms of:

                                                              • Technical hostility to advancement of safety techniques, rooted in the insular, defensive, and denialist central wielders of power, and backstopped by abuse of ISO’s own rules to silence critics and dissent.
                                                              • Hostility to physical safety, especially for those from marginalized groups. The post documents many instances, some known, some new, of the C++ project protecting sexual harassers and supporting the inclusion of someone previously convicted of multiple sex crimes (including one against a child) whose status as a sex criminal was known but not disclosed to others in the community.

                                                              The conclusion in the post is little short of despair that the C++ project’s participants and norms make it highly unlikely that it will adapt to meaningfully advance safety in the language, and that it will continue to be an unsafe language built by an unsafe project.

                                                              This is personally very disappointing. I wrote “C++ Must Become Safer” earlier this year because I think advancing safety in C++ would do meaningful good. However, it is hard to feel optimistic after reading this post.

                                                              1. 16

                                                                That’s actually a very constructive paper you wrote there. Thanks for the effort.

                                                                But if you care for memory-safety or are in a market where that might become relevant for your product, the only option you have right now is to move towards rust. I can not see C++ shipping any working solution in the next decade.

                                                            2. [Comment removed by moderator pushcx: Troll.]

                                                              1. 14

                                                                Hey, you were warned from the very first sentence, and at least to me, the subject matter was clear after the first couple paragraphs. And yet you inflicted this upon yourself. Or you didn’t, and just wrote this comment from the warnings alone? I’m halfway through the article, and “incoherent, full of profanity” sounds… inaccurate at best.

                                                                1. 4

                                                                  I sympathize with the article, but “incoherent and full of profanity” strikes me as a fair description. I don’t think it needed a transcript of a video about Trump, a rant about monads, or a plot summary of Dark Souls 1-3 to make its point.

                                                                  1. 8

                                                                    Some articles aim to be narrow and focused where every statement is picked with precision, and some aim to capture a gestalt. They’re both valuable!

                                                                    My technical writing leans towards the former, and I’m in awe of what Izzy wrote here.

                                                                2. 2

                                                                  When I read this article, my very first thought was “this is just an unmediated stream of ranting occasionally broken up by technical wording, it’s like a simulation of me ranting to myself when a tool doesn’t work.”

                                                                  After it was posted, before anyone commented, I was going to write a post like yours, but figured it wasn’t worth the time. After seeing so many people praising it, I have to assume this is some sort of community bias and this person is just really famous or something. To be honest, I’m shocked this is allowed to stay on this site. Go ahead and look in the moderation logs and you’ll see someone was banned for comparing bitcoin to a handjob.

                                                                  The biggest red flag was how the blog post mentions “all technical topics are also political.” I can tell whoever this is, they’re somebody I never want to talk with.

                                                                  1. 21

                                                                    The biggest red flag was how the blog post mentions “all technical topics are also political.”

                                                                    Which they are as a simple matter of fact. You only need to dig deep enough. Sure on the surface it’s just about how you can make cool things with cool techniques, or how you can ruin projects with incompetence. But something as simple as “should std::vector check all bounds by default even on release builds?” such a choice has a significant impact on many people (C++ programmers and their users), it arbitrates between conflicting interests… it’s already political at this point.

                                                                    But we can dig even deeper, see how the sausage is made. Which inevitably goes into how stuff is produced, how people are paid for it, or have enough spare time to donate their skills, how communities are formed, run, and led… which is deeply political, and that’s even before we think of how this ties into society at large.

                                                                    Because once you get there, oh my… Computers are freaking everywhere. And you expect their technical aspect to not be political? How naive. Though to be honest, I suspect you’re not that naive. I suspect that instead, when you hear people speak of technical topics being political, you can kinda guess already what kind of political opinions they are likely to defend, and those happen to be opposed to yours.

                                                                    That’s politics for you, we’re not going to agree all the time. I sure wouldn’t like to talk to fascists, precisely because of their political opinions.

                                                                    1. 1

                                                                      I meant it more as a “just because it’s true doesn’t mean it’s right” way. You can go up to me while I’m eating a burger and tell me I’m eating something that used to poop and that we’re all going to die. And while that’s technically right, all that resolves in is me not wanting to be around you.

                                                                      My point is, politics is like pooping. Everyone poops. And you don’t poop where you eat.

                                                                      1. 25

                                                                        This stuff affects different groups of people differently. You can afford not to care to hear about it while you eat; others can’t. Some people would like to tune out of politics entirely when discussing technology; others’ lives are so affected by it, even when all they want and are trying to do is play with technology, that the only way to hope to improve things is to recognise the interplay.

                                                                        You can choose not to, but for many there isn’t a choice except to recognise the issues and try to improve them, or leave the field entirely, because to just be quiet — because folks liken discussing realities that differ to their own to defecating where you eat— is to meekly accept repressive treatment. And we wonder why minorities are driven from the field.

                                                                        1. -2

                                                                          Like most people, I’m relatively unphased by attempts at forcing interest in a topic through guilt. Politics are nothing but an excuse to create arguments and contention, and I am not comfortable being receptive to it’s inclusion into an atmosphere in any capacity.

                                                                          1. 21

                                                                            I do want to note, I really wasn’t trying to apply guilt at any level — just describing the difference between folks who can afford not to care, and those who can’t. Politics for you are “nothing but an excuse to create arguments and contention” — lucky you! When you say:

                                                                            The biggest red flag was how the blog post mentions “all technical topics are also political.” I can tell whoever this is, they’re somebody I never want to talk with.

                                                                            .. what you end up saying is, you never want to talk with anyone whose reality is such that politics affects their lives — minorities with fewer rights, the systemically oppressed, and so on. Not wanting to involve yourself with such people people or even hear what they have to say is your right, but it’s certainly a kind of high horse.

                                                                            1. -5

                                                                              I’m not sure if you’re implying that I should tolerate someone’s obnoxious behavior to insert politics into spaces they don’t belong just because they are in some way oppressed, in some non-specific way. But if you are trying to imply that, then I would not accept disruptive behavior regardless of someone’s past trauma or prestige.

                                                                              1. 22

                                                                                No. What good would that do? I’m implying you lack compassion, not telling you what to do.

                                                                                Your unyielding language (most recently: “obnoxious behaviour”, “into spaces [it] doesn’t belong”, “disruptive behaviour”) has made it clear there is no point in trying to effect a change in your point of view. You commented on your distaste for the article and confusion as to its relative acceptance here; I’m telling you how others differ and why. I hope this has been edifying.

                                                                            2. 16

                                                                              […] I am not comfortable being receptive to [politics] inclusion into an atmosphere in any capacity.

                                                                              Few people who favour the status quo ever are.

                                                                              1. 1

                                                                                I’m not sure what that means or what the status quo is, I just don’t like talking about people’s opinions. Isn’t one of the rules of this site to avoid politics?

                                                                                1. 20

                                                                                  Isn’t one of the rules of this site to avoid politics?

                                                                                  It is inconsistently applied, in part because the frontier between technical and politics is blurry. And it is very often the case that some very political aspects of our life are directly relevant to the kind of technical topics we discuss here.

                                                                                  This very article for instance, discusses at length how the governance of C++ is making the language worse. It’s not laser focused on that, but it it my main take away: politics with technical consequences.

                                                                                  1. 10

                                                                                    Isn’t one of the rules of this site to avoid politics?

                                                                                    Anytime you have more than 2 people in 1 context, you have politics so it would be hard to avoid it (and I checked, it doesn’t say so in the rules).

                                                                            3. 8

                                                                              Are you telling me that we could separate technical matters from politics if we wanted? For personal and small groups stuff that might be feasible, but at scale? No way.

                                                                            4. [Comment removed by moderator pushcx: Troll.]

                                                                              1. [Comment removed by moderator pushcx: Don't feed the trolls.]

                                                                                1. [Comment removed by moderator pushcx: Troll.]

                                                                                  1. [Comment removed by moderator pushcx: Don't feed the trolls.]

                                                                            5. [Comment removed by moderator pushcx: Don't feed the trolls.]

                                                                              1. [Comment removed by moderator pushcx: Don't feed the trolls.]

                                                                                1. [Comment removed by moderator pushcx: Don't feed the trolls.]

                                                                          2. 0

                                                                            https://www.reddit.com/r/cpp/comments/1guzvuu/comment/ly2jyao/ has a nice summary from Wolfspaw:

                                                                            My Summary: The author, Izzy Muerte, is really sad and frustrated by Current C++ Path.
                                                                            
                                                                            Izzy has strong disagreements with C++ modules and the "Safe Profiles" idea,
                                                                            and prefers Sean Baxter Circle compiler approach:
                                                                            + A C++ compiler implemented from-the-ground with Lifetimes and Borrow Checker.
                                                                            
                                                                            Izzy has a hard time seeing a good future for C++ because the Committee, and the People with power to make decisions, are stuck in the past and showed a terrible track record (in the blog author perspective).
                                                                            
                                                                            Izzy also accuses some persons of rap* (showing proof), naz*sm, and toxic masculinity. Also mixes a lot of politics in the post, like saying that your Rust code might be used by the military to kill people.
                                                                            

                                                                            Another nice and long summary: https://www.reddit.com/r/cpp/comments/1guzvuu/comment/ly2eq60/

                                                                            1. 7

                                                                              that your Rust code might be used by the military to kill people.

                                                                              All free and open source software can be used for any purpose. That’s not limited to Rust.