As a postscript to
my previous complaint about Ruby, I received today a fantastic exploration of Ruby's closure and execution semantics, via
zsquirrelboy:
http://innig.net/software/ruby/closures-in-ruby.rb. This covers some of the ground that I did but then goes much, much deeper. I have only covered about half of it and probably will not get any farther today. If you are a Ruby fan or any kind of a computer language nerd I strongly recommend that you take 30 or 40 minutes to read through it.
The upshot is: Ruby is even more fucked than I recognized. I'm an understanding guy, and would be willing to accept a lot of the language's foibles if they were well documented up front, but some of these conclusions are really damning. See section 3 in particular, especially if you think that "I thought I knew all there was to know about the 'return' statement" is a funny joke.
Ruby seems like a very interesting but ultimately unsuccessful experiment in functional language semantics, where some of the novel concepts just do not pan out. Blocks in particular are a failure: if they were just implemented as first-class closures it would solve a
lot of problems, but that doesn't seem likely. A pity.