• patrick@lemmy.bestiver.se
    link
    fedilink
    English
    arrow-up
    20
    ·
    17 hours ago

    I too fixed performance problems in that repo a few years back and did a write up on it - https://jackson.dev/post/rust-coreutils-dd/

    I’m glad this project is getting some more attention, maybe even getting funding from Ubuntu since they’re using it? Last time I touched it most of the code was still pretty clearly written by Rust beginners and non-systems programmers so it likely had/has many such issues to uncover. Ubuntu putting it into their distro should hopefully get more experienced (and actually paid!) devs taking a closer look.

  • Blaster M@lemmy.world
    link
    fedilink
    English
    arrow-up
    15
    arrow-down
    1
    ·
    1 day ago

    They’ll fix it… sounds like a skill issue, if base64 got fixed and performs better than c

    • chocrates@piefed.world
      link
      fedilink
      English
      arrow-up
      4
      arrow-down
      6
      ·
      23 hours ago

      I’ve heard that while Rust has the ability to be faster than Go and maybe C, it is a lot harder to write rust code to do it

      • ulterno@programming.dev
        link
        fedilink
        English
        arrow-up
        5
        ·
        16 hours ago

        Well, you need to type more and you need to learn more things with Rust, before you can start making stuff.
        But the additional work is to make it easier for you to make changes later, when you come back to it after a while.

        So you might need to do more before hello world, but say if you have a complex library and want to use some function of it after learning Rust, it will be easier to not make some common mistakes.

        A pretty good recent example of something that will cause a common mistake would be:
        In the mongoc library, there is a function named mongoc_client_select_server and the pointer it returns requires destruction using mongoc_server_description_destroy. But it doesn’t say so in the function’s comments/documentation. So, I had to go into the function called by the function called by the function called by it, to find the function making said pointer and having a comment stating that the pointer made by it would require destruction by the user.
        And the only reason I found that out was my obsession, but I had already made the mistake.

      • trevor (he/they)@lemmy.blahaj.zone
        link
        fedilink
        English
        arrow-up
        14
        ·
        edit-2
        21 hours ago

        This is not true. If you know Rust and C equally well, you’re likely going to write equally performant Rust.

        You could say that Rust is harder to learn than C. I’d disagree based on my personal experience, but you wouldn’t be wrong.

        • PlexSheep@infosec.pub
          link
          fedilink
          arrow-up
          3
          ·
          4 hours ago

          I have read papers for my bachelor’s thesis that compared rust and c on x86-64 in terms of performance. It showed that C is a little or significantly faster, depending on the type of workload.

          This is likely due to some runtime checks the rust compiler adds, and modified rust compilers that added less runtime checks led to about the same performance.

          However, the performance is still very good for both languages (native machine code being executed), and in the same order of magnitude.

          My own measurements for the armv6m architecture with an STM-32 showed that rust may even be faster in some cases, since the optimizing of the rust compiler was better, at least for that setup and for the CRC-32 algorithm.

  • Luci@lemmy.ca
    link
    fedilink
    English
    arrow-up
    9
    arrow-down
    31
    ·
    edit-2
    50 minutes ago

    Rust running slower than C?

    Never would have guessed……

    Edit: LMAO

    • LeFantome@programming.dev
      link
      fedilink
      arrow-up
      6
      ·
      edit-2
      5 hours ago

      The best thing about all the C smugness here is how quickly it backfired.

      Out of dozens of utilities in uutils, two were slower than the GNU equivalents. In case the logic escapes some, that means that the others were already as fast or faster. Some are multiples faster. The overall uutils suite is faster then GNU Coreutils already and will only get better. There was nothing for C fans to be smug about to begin with.

      Of the two that were slower, it seems to have only taken a few days to make them faster. The article only tells us about one which is now 50% faster than the GNU version.

      But the promise of Rust is not that Rust is faster anyway. It is that it is easier and safer to refactor. The actual promise of Rust is that you can address issues like performance without as much fear that you will break everything.

      After the reported slowness, both of the two uutils implementations were dramatically sped up in just a couple of days or even hours. They are tested against the GNU test suite and so we know these tests are still passing. That is the promise of Rust. This example proves the Rust claims real. The C smugness did not age well.

      The C versions (GNU) can clearly be sped up as well. The question is who will do that and when. Because speeding up old C code is not nearly as easy or fun. My guess is that it is going to be more than a couple days before we see headlines bragging that GNU has caught up.

      The GNU Coreutils are maintained by Red Hat if we look at who contributes the code and who maintains the dev servers. They are professionally maintained. It is not a rag tag bunch of amateurs. So if uutils is already faster, it does not bode well for the C implementation.

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

        The overall uutils suite is faster then GNU Coreutils already and will only get better

        just did a quick benchmark.

        uutils cat is 2x slower.

        This is the unknown-linux-gnu release, the musl one is likely slower but didn’t check.

          • BatmanAoD@programming.dev
            link
            fedilink
            arrow-up
            17
            arrow-down
            2
            ·
            20 hours ago

            Πρεσυμαβλυ, ἰτ ἀλρεαδυ ὐσεδ ΣΙΜΔ, ἀνδ θατ’ς ὁ θε ἐξιστινγ ΓΝΥ ὐτιλιτυ βεατ ῾Ρυστ βυ ἀ φακτορ ὀφ 17ξ.

        • LeFantome@programming.dev
          link
          fedilink
          arrow-up
          4
          ·
          edit-2
          5 hours ago

          think it’s fair to say performance rust is hard to write

          This situation proved exactly the opposite.

          They wrote a utility to pass functional tests. It did. Then people said it was too slow. So, in just a few days or hours, they dramatically sped it up while still passing the tests.

          Seems like it was pretty easy to write fast Rust code in this case.

        • trevor (he/they)@lemmy.blahaj.zone
          link
          fedilink
          English
          arrow-up
          10
          ·
          21 hours ago

          I have no idea how. I write better Rust than I do C 🤷‍♂️

          Rust and C are basically identical in terms of performance (more or less). Idk where the myth that Rust is somehow less performant than C came from.

          • Possibly linux@lemmy.zip
            link
            fedilink
            English
            arrow-up
            3
            arrow-down
            4
            ·
            20 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.

            • BatmanAoD@programming.dev
              link
              fedilink
              arrow-up
              5
              ·
              edit-2
              18 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
                ·
                15 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.

                • BatmanAoD@programming.dev
                  link
                  fedilink
                  arrow-up
                  2
                  ·
                  5 hours ago

                  That’s not a fair comparison at all. Busybox is specifically optimized for size, and to accomplish that, leaves out a large number of GNU compatibility features; uutils is designed to mimic GNU as closely as possible, and I’m assuming that the binary you’re looking at is not the “small-release” build. Just to see what that looks like, I’ve built it that way now and that puts it under 7 MiB; still much larger than busybox, but it shows how much the optimization choices matter.

              • Possibly linux@lemmy.zip
                link
                fedilink
                English
                arrow-up
                1
                arrow-down
                4
                ·
                16 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
                  4
                  ·
                  14 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
                  5
                  ·
                  15 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
                  arrow-down
                  1
                  ·
                  15 hours ago

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

              • ulterno@programming.dev
                link
                fedilink
                English
                arrow-up
                0
                arrow-down
                4
                ·
                15 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?