I've been very taken by Ruby and how it uses blocks everywhere! This is an article I wrote just to emphasize that.
I still love this language to bits, and it was fun to relive that moment vicariously through someone elses eyes. Thanks for writing it up!
Also why in languages like C++, you get to control what is captured from the calling context.
Ruby has two types of closures: lambda's, where return returns to the caller, and proc's/blocks where return acts as a return in the defining scope.
Beginners often struggle with the distinction between lambda and block, and often will be wildly confused if they ever see "proc" in the wild.
Yet lambda and proc both return a Proc object, and if you take the value of a block, you also get a Proc object... Just with different return semantics...
It'd be nice if this was a bit clearer.