Push ifs up and fors down: The idiom, its algebra, and its limits

(debasishg.github.io)

43 points | by speckx 2 hours ago

5 comments

  • socializer 1 hour ago
    I am continually impressed by the ability of LLMs to take trivial ideas and turn them into lengthy and obtuse blog posts with unnecessary analogies.
    • swiftcoder 44 minutes ago
      Honestly, this just looks like one of those lingo-heavy-but-surface-level blog posts that used to make functional programming spaces so insufferable to everyone on the outside
      • mahboi 8 minutes ago
        These things are so divorced from the reality of programming, even when they involve actual code instead of fancy lingo. Like in Scala, not a pure functional language, tutorials used to find the most convoluted higher-order functional way to do simple things.
    • bioneuralnet 52 minutes ago
      Yet another encroachment on traditionally human activity.
  • wallstop 29 minutes ago
    What is missing here is any benchmarks backing up this argument for code structure.

    Of note, as of C#9 (and maybe prior), the dotnet runtime does this automatically whenever it is deemed safe. https://devblogs.microsoft.com/dotnet/performance-improvemen...

    The same technique is applied as an optimization, when deemed safe, in all current gen c compilers (gcc, llvm, etc).

    I'm very confused why neither measurements nor references to when this is done automatically in most modern languages is included in the article.

    • cogman10 4 minutes ago
      At least in JVM land, it's pretty easy to thwart that optimization. Particularly if the condition is on a mutable yet unchanged in the loop value.

      For example:

          var map = new HashMap<String, String>();
          map.put("foo", "bar");
          for (var i : items) {
            if ("bar".equals(map.get("foo")) {
              doStuff(i);
            }
          }
      
      Even though `map` isn't mutated, it's hard enough for the JVM to detect and the underlying `get` functions are complex enough that it'll run the `get("foo")` every time, which can be quiet expensive.
  • ninalanyon 12 minutes ago
    I've done this for years. Not every time of course but where it makes the code easier to understand and maintain.

    Speed was almost never the reason.

  • aappleby 6 minutes ago
    I have always phrased this as "Never do one of something".
  • apefulsin 12 minutes ago
    [dead]