• @witx@lemmy.sdf.org
    link
    fedilink
    623 hours ago

    To run perhaps. But what about the same metrics for debugging? How many hours do we spend debugging c/c++ issues?

  • @QuazarOmega@lemy.lol
    link
    fedilink
    342 days ago

    This doesn’t account for all the comfort food the programmer will have to consume in order to keep themselves sane

    • @arendjr@programming.dev
      link
      fedilink
      272 days ago

      I would argue that because C is so hard to program in, even the claim to machine efficiency is arguable. Yes, if you have infinite time for implementation, then C is among the most efficient, but then the same applies to C++, Rust and Zig too, because with infinite time any artificial hurdle can be cleared by the programmer.

      In practice however, programmers have limited time. That means they need to use the tools of the language to save themselves time. Languages with higher levels of abstraction make it easier, not harder, to reach high performance, assuming the abstractions don’t provide too much overhead. C++, Rust and Zig all apply in this domain.

      An example is the situation where you need a hash map or B-Tree map to implement efficient lookups. The languages with higher abstraction give you reusable, high performance options. The C programmer will need to either roll his own, which may not be an option if time Is limited, or choose a lower-performance alternative.

        • @witx@lemmy.sdf.org
          link
          fedilink
          120 hours ago

          And how testable is that solution? Sure macros are helpful but testing and debugging them is a mess

        • @arendjr@programming.dev
          link
          fedilink
          52 days ago

          I’m not saying you can’t, but it’s a lot more work to use such solutions, to say nothing about their quality compared to std solutions in other languages.

          And it’s also just one example. If we bring multi-threading into it, we’re opening another can of worms where C doesn’t particularly shine.

          • @KRAW@linux.community
            link
            fedilink
            English
            12 days ago

            Not sure I understand your comment on multithreading. pthreads are not very hard to use, and you have stuff like OpenMP if you want some abstraction. What about C is not ideal for multithreading?

            • @arendjr@programming.dev
              link
              fedilink
              52 days ago

              It’s that the compiler doesn’t help you with preventing race conditions. This makes some problems so hard to solve in C that C programmers simply stay away from attempting it, because they fear the complexity involved.

              It’s a variation of the same theme: Maybe a C programmer could do it too, given infinite time and skill. But in practice it’s often not feasible.

        • @arendjr@programming.dev
          link
          fedilink
          72 days ago

          Well, let’s be real: many C programs don’t want to rely on Glib, and licensing (as the other reply mentioned) is only one reason. Glib is not exactly known for high performance, and is significantly slower than the alternatives supported by the other languages I mentioned.

            • @arendjr@programming.dev
              link
              fedilink
              62 days ago

              Which one should I pick then, that is both as fast as the std solutions in the other languages and as reusable for arbitrary use cases?

              Because it sounds like your initial pick made you loose the machine efficiency argument and you can’t have it both ways.

        • @calcopiritus@lemmy.world
          link
          fedilink
          42 days ago

          Glib us licensed under LGPL. So unless your project is happy with that, it’s as if it didn’t exist. That’s one of the problems of having a small standard library.

          • @aubeynarf@lemmynsfw.com
            link
            fedilink
            32 days ago

            It’s a single counterexample. there are many, many such libraries for C and the programmer does not have to roll their own.

      • @TwistyLex@discuss.tchncs.de
        link
        fedilink
        116 hours ago

        For Haskell to land that low on the list tells me they either couldn’t find a good Haskell programmer and/or weren’t using GHC.

      • Caveman
        link
        fedilink
        11 day ago

        Wonder what they used for the JS state since it’s dependent on the runtime.

      • @Mihies@programming.dev
        link
        fedilink
        142 days ago

        Also the difference between TS and JS doesn’t make sense at first glance. 🤷‍♂️ I guess I need to read the research.

      • @GiorgioPerlasca@lemmy.ml
        link
        fedilink
        42 days ago

        Every time I get surprised by the efficiency of Lisp! I guess they mean Common Lisp there, not Clojure or any modern dialect.

        • @monomon@programming.dev
          link
          fedilink
          11 day ago

          Yeah every time I see this chart I think “unless it’s performance critical, realtime, or embedded, why would I use anything else?” It’s very flexible, a joy to use, amazing interactive shell(s). Paren navigation is awesome. The build/tooling is not the best, but it is manageable.

          That said, OCaml is nice too.

      • @Matriks404@lemmy.world
        link
        fedilink
        6
        edit-2
        2 days ago

        For Lua I think it’s just for the interpreted version, I’ve heard that LuaJIT is amazingly fast (comparable to C++ code), and that’s what for example Löve (game engine) uses, and probably many other projects as well.

      • @TCB13@lemmy.world
        link
        fedilink
        English
        72 days ago

        I guess we can take the overhead of rust considering all the advantages. Go however… can’t even.

      • I Cast Fist
        link
        fedilink
        42 days ago

        Looking at the Energy/Time ratios (lower is better) on page 15 is also interesting, it gives an idea of how “power hungry per CPU cycle” each language might be. Python’s very high

      • @HelloRoot@lemy.lol
        link
        fedilink
        English
        52 days ago

        WASM would be interesting as well, because lots of stuff can be compiled to it to run on the web

        • Ben Matthews
          link
          fedilink
          2
          edit-2
          2 days ago

          Indeed, here’s an example - my climate-system model web-app, written in scala running (mainly) in wasm
          (note: that was compiled with scala-js 1.17, they say latest 1.19 does wasm faster, I didn’t yet compare).
          [ Edit: note wasm variant only works with most recent browsers, maybe with experimental options set - if not try without ?wasm ]

            • Ben Matthews
              link
              fedilink
              English
              22 days ago

              Oh, it’s designed for a big desktop screen, although it just happens to work on mobile devices too - their compute power is enough, but to understand the interactions of complex systems, we need space.

      • JustEnoughDucks
        link
        fedilink
        52 days ago

        I would be interested in how things like MATLAB and octave compare to R and python. But I guess it doesn’t matter as much because the relative time of those being run in a data analysis or research context is probably relatively low compared to production code.

        • esa
          link
          fedilink
          72 days ago

          Is there a lot of computation-intensive code being written in pure Python? My impression was that the numpy/pandas/polars etc kind of stuff was powered by languages like fortran, rust and c++.

          • @Mihies@programming.dev
            link
            fedilink
            52 days ago

            In theory Java is very similar to C#, an IL based JIT runtime with a GC, of course. So where is the difference coming from between the two? How is it better than pascal, a complied language? These are the questions I’m wondering about.

          • esa
            link
            fedilink
            42 days ago

            And it powers a lot of phones. People generally don’t like it when their phone needs to charge all the freaking time.

            • @HelloRoot@lemy.lol
              link
              fedilink
              English
              3
              edit-2
              2 days ago

              I ran Linux with KDE on my phone for a while and it for sure needed EVEN MORE charging all the time even though most of the system is C, with a sprinkle of C++ and QT.

              But that is probably due to other inefficiencies and lack of optimization (which is fine, make it work first, optimize later)

              • esa
                link
                fedilink
                42 days ago

                Yeah, and Android has had some 16 years of “optimize later”. I have some very very limited experience with writing mobile apps and while I found it to be a PITA, there is clearly a lot of thought given to how to not eat all the battery and die in the ecosystem there. I would expect that kind of work to also be done at the JVM level.

                If Windows Mobile had succeeded, C# likely would’ve been lower as well, just because there’d be more incentive to make a battery charge last longer.

            • @HelloRoot@lemy.lol
              link
              fedilink
              English
              6
              edit-2
              5 hours ago

              I’m using the fattest of java (Kotlin) on the fattest of frameworks (Spring boot) and it is still decently fast on a 5 year old raspberry pi. I can hit precise 50 μs timings with it.

              Imagine doing it in fat python (as opposed to micropython) like all the hip kids.

          • @ulterno@programming.dev
            link
            fedilink
            English
            22 days ago

            etalon
            /ˈɛtəlɒn/
            noun Physics
            noun: etalon; plural noun: etalons

            a device consisting of two reflecting glass plates, employed for measuring small differences in the wavelength of light using the interference it produces.

            I don’t see how that word makes sense in that phrase

          • @Feyd@programming.dev
            link
            fedilink
            12 days ago

            That definitely raised an eyebrow for me. Admittedly I haven’t looked in a while but I thought I remembered perl being much more performant than ruby and python

    • @mbirth@lemmy.ml
      link
      fedilink
      62 days ago

      Does the paper take into account the energy required to compile the code, the complexity of debugging and thus the required re-compilations after making small changes? Because IMHO that should all be part of the equation.

      • @HelloRoot@lemy.lol
        link
        fedilink
        English
        62 days ago

        They compile each benchmark solution as needed, following the CLBG guidelines, but they do not measure or report the energy consumed during the compilation step.

        Time to write our own paper with regex and compiler flags.

  • Eager Eagle
    link
    fedilink
    English
    202 days ago

    and in most cases that’s not good enough to justify choosing c

  • @kersplomp@programming.dev
    link
    fedilink
    102 days ago

    I just learned about Zig, an effort to make a better C compatible language. It’s been really good so far, I definitely recommend checking it out! It’s early stages for the community, but the core language is pretty developed and is a breath of fresh air compared to C.

  • @frezik@midwest.social
    link
    fedilink
    162 days ago

    For raw computation, yes. Most programs aren’t raw computation. They run in and out of memory a lot, or are tapping their feet while waiting 2ms for the SSD to get back to them. When we do have raw computation, it tends to be passed off to a C library, anyway, or else something that runs on a GPU.

    We’re not going to significantly reduce datacenter energy use just by rewriting everything in C.

    • BlackLaZoR
      link
      fedilink
      132 days ago

      We’re not going to significantly reduce datacenter energy use just by rewriting everything in C.

      We would however introduce a lot of bugs in the critical systems