[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)