I thought (2) were coming. I thought let ... end was a sugar for (() -> begin ... end)(). It was a nice pattern to use in module-level scope to avoid leaking variables as globals. For example, if you need to do some metaprograming using @eval and while, I suppose simply surrounding the block by let would not work anymore with the choice (1)? Also, I suppose top-level for/while loop could be efficiently executed just by surrounding it by let in principle with choice (2)?
It looks like both choices have a consistency which is mutually exclusive without 1.0-like scoping behavior. If we are to lose one consistency anyway, why not choose a useful one? Or maybe there are useful cases for choice (1)?