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

    Yeah, arguably the only answer to this question is Rust.

    Java/C#/etc. are not fully compiled (you do have a compilation step, but then also an interpretation step). And while Java/C#/etc. are memory-safe in a single-threaded context, they’re not in a multi-threaded context.

      • Ephera@lemmy.ml
        link
        fedilink
        arrow-up
        0
        ·
        2 months ago

        I don’t know much about C++, but how would that do memory safety in a multi-threaded context? In Rust, that’s one of the things resolved by ownership/borrowing…

        Or are you saying arguably, as in you could argue the definition of the categories to be less strict, allowing C++ as well as Java/C#/etc. to match it?

        • Saizaku@lemmy.dbzer0.com
          link
          fedilink
          arrow-up
          1
          ·
          2 months ago

          Because you would be using std::shared_ptr<> rather than a raw pointer, which will automatically deallocate the memory when a shared point leaves the scope in the last place that it’s used in. Along with std::atmoic<shared_ptr> implements static functions that can let you acquire locks and behave like having a mutex.

          Now this isn’t enforced at the compiler level, mostly due to backwards compatibility reasons, but if you’re writing modern c++ properly you wouldn’t run into memory safety issues. If you consider that stretching the definition then I guess I am.

          Granted rust does a much better job of enforcing these things as it’s unburdened by decades of history and backwards compatibility.