• Possibly linux@lemmy.zip
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    3
    ·
    13 hours ago

    It depends on what you are counting as “performance”

    Good C code is way better than mediocre Rust code. C also has much smaller binaries.

      • ulterno@programming.dev
        link
        fedilink
        English
        arrow-up
        0
        arrow-down
        1
        ·
        9 hours ago

        But will a good hello world program, made in JS, run on Firefox on an Embedded Windows 11 OS, running on a CPU emulator running on WASM on Edge be more performant than a mediocre hello world program in C, running on Linux on the same hardware that Edge run on?

    • BatmanAoD@programming.dev
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      12 hours ago

      If your goal is small binaries, it’s possible to get them with Rust, too: https://github.com/johnthagen/min-sized-rust

      There are a variety of reasons why Rust binaries tend to be bigger unless you follow some of those guidelines, but the biggest one (and actually not something those guidelines recommend changing!) is that C is generally dynamically linked against a system version of the C standard library, whereas Rust binaries are statically linked by default, meaning that the binary is actually self-contained.

      • Samueru_sama@programming.dev
        link
        fedilink
        English
        arrow-up
        1
        ·
        8 hours ago

        whereas Rust binaries are statically linked by default, meaning that the binary is actually self-contained.

        rust still produces larger binaries even if you compare it to static C binaries.

        Take for example busybox, you can compile all of it as a single 1.2 MiB static binary that provides 395 utilities including wget.

        Meanwhile the uutils static musl binary is 12 MiB and only provides 115 utilities.

      • Possibly linux@lemmy.zip
        link
        fedilink
        English
        arrow-up
        1
        arrow-down
        2
        ·
        10 hours ago

        C is still better for the embedded world

        If you have gigabytes of storage and memory Rust makes more sense. C shines as it allows fine control over memory. The fact that you can tie into The system libraries makes it very resource friendly since you don’t need redundant code.

        • zygo_histo_morpheus@programming.dev
          link
          fedilink
          arrow-up
          2
          ·
          8 hours ago

          You can tailor the rust standard library to be more embedded friendly in several way, like if you don’t have dynamic memory allocation or a filesystem, you can get the standard library sans those features.

          Rust also gives you a very fine grained level of control of memory, I think equivalent to C (maybe there’s some gotcha that I’m not aware of but if not equivalent very close).

          It really doesn’t sound like you know that much about Rust here and are just making things up, you certainly don’t need “gigabytes of storage and memory”

        • BatmanAoD@programming.dev
          link
          fedilink
          arrow-up
          3
          ·
          9 hours ago

          I think you’re making some poorly-researched assumptions.

          In the embedded world, there often aren’t “system libraries,” depending on just what you’re targeting. But if, for some reason, you really do want to use libc but not the Rust standard library, you can certainly do that; for instance, here’s a crate that reimplements the Rust standard library’s output and formatting capabilities using libc: https://github.com/mmastrac/rust-libc-print

          Rust provides essentially the same memory control as C does. You can also have inline assembly in Rust, just as in C.

        • ulterno@programming.dev
          link
          fedilink
          English
          arrow-up
          0
          ·
          9 hours ago

          Wasn’t Rust originally made for embedded systems to reduce the time taken debugging runtime errors by shifting those to compile time?