tl;dr: The problem is that if () were to call blocks, then this
def foo
proc {}
end
foo()
...would be ambiguous. Is it a call of foo returning a block, or a call of foo returning a block and calling that block?To "fix" this you'd have to require parens when calling all functions, since you have no way of knowing whether the function returns a block or not. The other option is only allowing parens to call blocks at certain times and not at others - certainly confusing!