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 the worst case, that must have intermediate space requirements equal to the entire collections, right?
A visual demo of Ruby's lazy enumerator
11–20 of 28 posts
Re: A visual demo of Ruby's lazy enumerator
#12Lazy 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…
Re: A visual demo of Ruby's lazy enumerator
#13Earlier quoted context omitted.
In the worst case, that must have intermediate space requirements equal to the entire collections, right?
I don’t think that can happen because all those functions assume the streams are consistently sorted.
Re: A visual demo of Ruby's lazy enumerator
#14Lazy 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…
How is it different than a window, rolling window?
Re: A visual demo of Ruby's lazy enumerator
#15I 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.
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.
Re: A visual demo of Ruby's lazy enumerator
#16Hm, the CSS and JS don't appear to load for me. Not even a set of tags in the HTML response.
Re: A visual demo of Ruby's lazy enumerator
#17Later 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)
Re: A visual demo of Ruby's lazy enumerator
#18Earlier quoted context omitted.
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.
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?
Re: A visual demo of Ruby's lazy enumerator
#19When 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 (…
Re: A visual demo of Ruby's lazy enumerator
#20I 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.
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.