because it's meant to be a more functional language. if slicing an array out of bounds threw an error it would be java.
[].slice(0, 100).each do |x| puts x end
that shouldn't be an error and it seems to be the principle of least surprise imo.