Speaking of my own experience on this subject: A large part of my career over the last decade has been working in Erlang. I'd estimate that once I had a firm understanding of the language and the platform, most of the problems in my code have been runtime type errors.
The erlang distribution includes an optional static analysis tool called dialyzer, and for a little over two years I've used it consistently. Without question it has provided a significant improvement in my productivity and the quality of software I deploy. Also, the type annotations in the code (such as they are..) do help with documentation (edoc) and human understanding.
So, yeah, it's a controversial topic, but 'compile time' type validation seems to work for me. ymmv, of course!
The erlang distribution includes an optional static analysis tool called dialyzer, and for a little over two years I've used it consistently. Without question it has provided a significant improvement in my productivity and the quality of software I deploy. Also, the type annotations in the code (such as they are..) do help with documentation (edoc) and human understanding.
So, yeah, it's a controversial topic, but 'compile time' type validation seems to work for me. ymmv, of course!