I don't find it that odd, Nobu, although I think most developers would tend to use do-end anyway as we usually do in Ruby when the block span multiple lines.
I've heard of a convention to use { ... } for blocks evaluated for a result and do ... end for blocks evaluated for side effects: http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc
From this point of view, there probably shouldn't be any differences in the syntax inside the two forms of blocks.
I have suggested the same proposal (in Japanese [ruby-dev:31393]).
Matz said in [ruby-dev:31423] that it is not clear (to him) ...
Definitely the latter. The rescue statement in the block should only rescue errors that occur inside the block. This is more apparent if you consider that:
loopdorescuefinallyend
is equivalent to:
x=procdorescuefinallyendwhiletruex.callend
Similarly replacing 'while' with a method, such as #each; the 'rescue' in the block should not expect to catch exceptions in the implementation of 'each', only the exceptions raised in the body of the block.