• mox@lemmy.sdf.org
    link
    fedilink
    arrow-up
    3
    ·
    2 months ago

    With no context, this could be an honest attempt to learn about different tools, a thinly veiled set-up to promote a specific language, or an attempt to stir up drama. I can’t tell which.

    It’s curious how such specific conditions are embedded into the question with no explanation of why, yet “memory safe” is included among them without specifying what kind of memory safety.

    • 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.

    • AbelianGrape@beehaw.org
      link
      fedilink
      arrow-up
      1
      ·
      1 month ago

      Yeah, I like subleq.

      • compiler is extremely fast, faster even than tinycc
      • strongly statically typed: all values are ints. Since it’s all of them, you don’t even need to write it!
      • memory safe: the entire (virtual) address space is guaranteed to be accessible at all times so there’s no way to leak any of it (can’t release it anyway) or to segfault (it’s all accessible).

      Subleq is the obvious winner in my mind.

  • Lambda@lemmy.ca
    link
    fedilink
    arrow-up
    1
    ·
    2 months ago

    Ada, hands down. Every time I go to learn Rust I’m disappointed by the lack of safety. I get that it’s miles ahead of C++, but that’s not much. I get that it strikes a much better balance than Ada (it’s not too hard to get it to compile) but it still leaves a lot to be desired in terms of safe interfacing. Plus it’s memory model is more complicated than it needs to be (though Ada’s secondary stack takes some getting used to).

    I wonder if any other Ada devs have experience with rust and can make a better comparison?

    • collapse_already@lemmy.ml
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 months ago

      I have done quite a bit of C, C++, Ada, and Pascal development. I recently got into Rust. I am still getting used to Rust, but it feels a bit like someone tried to apply Ada to C++. I like the modern development environment, but I am slower writing code than I would be in Ada or C++. The one feature of Ada that I really like and want other languages to adopt is the Rep spec. I write driver code and being able to easily and explicitly identify which symbol corresponds to which bit is really good.

    • refalo@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      2 months ago

      I would use Ada or Spark in a heartbeat if there was an easy-to-use, mature cross-platform GUI library for it.

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

    People don’t understand that JIT languages are still compiled, JIT literally describes when it’s compiled.

    That said, F# and/or OCaml.

  • davidagain@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    2 months ago

    Elm, which is the loveliest language ever.

    But I’m not sure if compiles to javascript counts as compiled, in which case haskell, which is considerably less lovely but still good.

    Roc isn’t finished, but it might turn out lovely, I don’t know.

    • warlaan@feddit.org
      link
      fedilink
      arrow-up
      0
      ·
      2 months ago

      C# isn’t exactly compiled, at least not into machine language. It is transpiled into byte code that is run on a virtual machine that on turn is an interpreter/JIT-compiler.

      Depending on why someone is asking for a compiled language that may or may not be a problem, because to the one writing the code it looks like a compiled language, but to the one running it it looks like an interpreted one.

      • GetOffMyLan@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        2 months ago

        It is compiled to bye code. Just to be clear transpiling is completely different. It is also not interpreted.

        But ahead of time compilation is available now. So you can compile straight machine code.

        The newer tiered JIT can actually give better performance than a traditional compiler as well.

        Overall C# is an awesome language. If performance is absolutely critical you can use raw pointers and manual memory management, but obviously you lose safety then.

  • demesisx@infosec.pub
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    2 months ago

    As others have said, Haskell and Rust are pretty great. A language that hasn’t been mentioned that I REALLY want to catch on, though, is Unison.

    Honorable mention to my main driver lately: Purescript