• Zacryon@feddit.org
    link
    fedilink
    arrow-up
    4
    arrow-down
    6
    ·
    6 months ago

    I don’t like that “C++ isn’t memory safe”. It is. Users of that language are usually just not experienced or educated enough and therefore more mistakes happen.

    I agree though, that other languages like Rust or Java can make it easier to prevent such mistakes.

    In my experience, using smart pointers alone already solves 90% of memory issues I have to deal with. C++ improved a lot in that regard over the decades.

    • dreugeworst@lemmy.ml
      link
      fedilink
      arrow-up
      8
      ·
      6 months ago

      I agree that experienced users can write code that leaks less than in C, leaving aside the bottomless pit of despair that is undefined behaviour. But the the language isn’t memory safe, it doesn’t even prevent you from returning a reference to a local or helpnwitg iterator invalidation. you don’t have to jump through any hoops to enable making that mistake.

      • Zacryon@feddit.org
        link
        fedilink
        arrow-up
        2
        arrow-down
        4
        ·
        6 months ago

        If a language prevents you from doing stuff like that, this always comes at a cost, since it has to do the work for you, almost always. This is additional overhead you can get rid of in C++ and therefore gain a lot of performance. But that again comes with more responsibility on the developer’s side and you might need to implement appropriate checks yourself where needed.

          • Zacryon@feddit.org
            link
            fedilink
            arrow-up
            2
            ·
            6 months ago

            It’s not just about runtime performance, but also about coding flexibility, and for example also reduction of boilerplate.

            • lolcatnip@reddthat.com
              link
              fedilink
              English
              arrow-up
              2
              arrow-down
              1
              ·
              6 months ago

              Ah yes, I love how C++ is has so little boilerplate. Sometimes I can even write several statements in a row without any!

              • Zacryon@feddit.org
                link
                fedilink
                arrow-up
                2
                ·
                6 months ago

                You’ve missed the context. There are occasions in Rust where you have to use more boilerplate code which you wouldn’t have to implement in C++ to that extent.

                But saying that C++ is free of boilerplate is of course ridiculous, if you are not able to heavily leverage templates, CRTPs, macros and alike.

        • dreugeworst@lemmy.ml
          link
          fedilink
          arrow-up
          2
          ·
          6 months ago

          sure, maybe, but performance doesn’t matter for deciding if a language is memory-safe or not. And C++ isn’t memory-safe by any commonly used interpretation of that word.

          You may of course decide that the downsides of memory-safety aren’t worth it for your use-case, that is a separate issue

          • Zacryon@feddit.org
            link
            fedilink
            arrow-up
            2
            ·
            6 months ago

            I think it boils down, how we define “memory safe”. C++ is perfectly memory safe, if you know what you’re doing. A lot of people don’t. Which is why Rust was born. that doesn’t make C++ a memory-unsafe language. It just demands more responsibility from the user. A design philosophy that comes with a lot more flexibility than Rust can offer.

            Which is fine. Both languages have their perks. But saying C++ isn’t memory safe, while Rust is, is in my opinion just plainly wrong. Besides, with “unsafe” Rust inherently already the door for memory issues.

            Modern C++ practises and dev patterns can handle most memory issues in C++ pretty easily. Consider smart pointers for example, or RAII.

            It’s not the language’s fault if it is used wrong.

    • lolcatnip@reddthat.com
      link
      fedilink
      English
      arrow-up
      8
      arrow-down
      1
      ·
      6 months ago

      I’m very experienced with C++and I still feel like I’m juggling chainsaws every time I use it. And I’ve personally run into into things like use after free errors while working in Chromium. It’s a massive codebase full of multithreading, callbacks, and nonlocal effects. Managing memory may be easy in a simple codebase but it’s a nightmare in Chromium. Tools like AddressSanitizer are a routine part of Chrome development for exactly that reason. And people who think memory management is easy in C++ are precisely the people I expect to introduce a lot of bugs.

      • Zacryon@feddit.org
        link
        fedilink
        arrow-up
        2
        ·
        6 months ago

        I’ve a very long track record using C++ as well and I can’t share the feeling. I don’t say it’s alyways easy. I’m just saying that it’s doable and therefore whether the software is memory safe depends on the expertise of the devs. Modern C++ practises, programming patterns and as well tools from the STL (or even your own implementation) make life a lot easier. If you don’t use them, that’s not the languages fault. In the end, how you use the language still matters a lot. If you’d like to think less about memory management, go on and use Rust or C# or Java or even Python if performance doesn’t matter. That’s perfectly fine. This can come with other issues, like more boilerplate in the case of Rust for example, but in the end those languages are tools. Choose the tool which gets your job done.

        • lolcatnip@reddthat.com
          link
          fedilink
          English
          arrow-up
          3
          ·
          6 months ago

          whether the software is memory safe depends on the expertise of the devs

          No. Just stop. If a language depends on the expertise of the developer to be free of memory bugs, then by definition, it is not memory safe because memory safety means such bugs are impossible by design. Quit trying to redefine what memory safety means. A program being free of memory bugs does not in any way imply memory safety.

          • Zacryon@feddit.org
            link
            fedilink
            arrow-up
            2
            ·
            6 months ago

            Yes. I stopped now. I was hinted towards the usual definition of memory safe languages at another point in this discussion.

            Although it is perfectly possible to write memory safe code in C++, I agree that the lack of enforcement makes it inherently unsafe.

        • WhyJiffie@sh.itjust.works
          link
          fedilink
          English
          arrow-up
          1
          ·
          6 months ago

          I don’t think this solely depends on the level of experience. People make mistakes, and these kinds of mistakes are very hard to find. And don’t tell me you are the perfect coder that makes no mistakes, introduces no bugs.

          • Zacryon@feddit.org
            link
            fedilink
            arrow-up
            2
            ·
            6 months ago

            I’m not. But in my experience, using memory safe programming patterns, classes and possibly additional testing and analasys tools do the job quite well.

            But yeah. I changed my mind about this memory-safety-property. The lack of enforcement really does make C++ inherently memory unsafe.