[HN Gopher] A visual demo of Ruby's lazy enumerator
       ___________________________________________________________________
        
       A visual demo of Ruby's lazy enumerator
        
       Author : rossta
       Score  : 74 points
       Date   : 2025-01-08 23:15 UTC (2 days ago)
        
 (HTM) web link (joyofrails.com)
 (TXT) w3m dump (joyofrails.com)
        
       | Lio wrote:
       | That's lovely and makes it very obvious what's happening.
        
       | endorphine wrote:
       | I was expecting a visual comparison towards the end of the
       | article, where you would be able to click a button and both the
       | eager and lazy versions would start executing simultaneously, one
       | displayed next to the other, and you would clearly see that the
       | lazy one completed earlier. This would make it even more obvious
       | how the lazy one is faster.
       | 
       | Nevertheless, this was great.
        
         | rossta wrote:
         | Thanks for the feedback. I was thinking along those lines but
         | settled on a version that let you toggle between the two. I'll
         | keep this in mind for next time though.
         | 
         | There are probably a lot of fun variations to explore. Since
         | this post seemed to resonate, I may be motivated to try some
         | more experiments.
        
           | robocat wrote:
           | I find horizontal/vertical is usually confusing (not to you
           | obviously). Here is an example:
           | https://www.investopedia.com/terms/h/horizontalanalysis.asp
           | Maybe easier to stick with the lazy/eager wording?
        
             | rossta wrote:
             | That's fair. I acknowledge that terms like "horizontal" and
             | "vertical" may be overloaded or even confusing, in this
             | case, if it's difficult to see the connection with the
             | visuals. This is somewhat part of the risk in trying to
             | explain a concept in a less-than precise way to introduce a
             | new concept.
        
       | thih9 wrote:
       | Related discussion from yesterday:
       | 
       | https://news.ycombinator.com/item?id=42652775 (different
       | submitter; 29 points, 3 comments)
        
       | Syntaf wrote:
       | Really cool visualization and neat to learn about lazy
       | enumeration!
       | 
       | Excuse me while I go back through my code and make sure I'm using
       | lazy enumeration wherever I'm iterating over large
       | collections....
        
         | dylan604 wrote:
         | This sounds like a similar response I had when learning about
         | stream editors vs text editors. It was one of the killer apps
         | that convinced to become a CLI warrior. Opening up a large text
         | file in Notepad took for ever, but opening the same file in vim
         | was a nothing burger. Then, the same person that showed me that
         | showed me sed/awk/grep, and I was off to the races.
        
       | hakunin wrote:
       | Lazy enumeration can also save memory, because you aren't storing
       | entire collections during intermediate steps, and it works with
       | infinite/unknown size collections. Such as streaming data.
       | 
       | Some examples:
       | 
       | I wrote a utility gem a while ago that lets you lazily intersect,
       | union, etc various potentially infinite streams of data.
       | https://github.com/maxim/enum_utils/
       | 
       | I also used lazy enumeration for traversing the wordmap in my no-
       | RAM static storage gem. https://github.com/maxim/wordmap/
        
         | hansvm wrote:
         | In the worst case, that must have intermediate space
         | requirements equal to the entire collections, right?
        
           | hakunin wrote:
           | I don't think that can happen because all those functions
           | assume the streams are consistently sorted.
        
             | hansvm wrote:
             | Ohhhhh, nice. Yeah, sorted data is powerful. Thanks for
             | pointing that out.
        
         | pyinstallwoes wrote:
         | How is it different than a window, rolling window?
        
           | hakunin wrote:
           | It's probably a version of that. But since data is assumed
           | sorted, memory requirements almost never grow beyond one item
           | per stream.
        
       | adsteel_ wrote:
       | Hm, the CSS and JS don't appear to load for me. Not even a
       | <body><html> set of tags in the HTML response.
        
         | fredrikholm wrote:
         | Same here, both on computer and mobile. The rest of the website
         | looks fine.
        
       | afraca wrote:
       | When I learned Haskell in college I was blown away by how
       | laziness enables cool things like dealing with infinite lists or
       | more performance even though the UX is exactly the same.
       | (Apparently with Ruby there is the slight hint of adding the lazy
       | method in between)
       | 
       | Later I found out laziness in the whole system by default leads
       | to some difficult issues, which quite a few people seem to agree
       | with. Simon Peyton Jones (Haskell co-creator) apparently has said
       | "The next Haskell will be strict".
       | (https://news.ycombinator.com/item?id=14011943)
        
       ___________________________________________________________________
       (page generated 2025-01-11 23:00 UTC)