> most modern dynamically-typed languages err way to far on the side of permitting (or ignoring) operations which should raise exceptions.
Dart is a good example of a modern, dynamically typed language that was designed to not just silently allow errors like these. Accessing an unknown property will throw. Likewise, calling an undefined method will throw, as will calling a method with too many or two few arguments.
Even in unchecked mode, these will throw exceptions. The difference between unchecked and checked mode has to do with how static type annotations are processed. How unknown methods are handled is purely a facet of the dynamic dispatch semantics.
Dart is a good example of a modern, dynamically typed language that was designed to not just silently allow errors like these. Accessing an unknown property will throw. Likewise, calling an undefined method will throw, as will calling a method with too many or two few arguments.