I do actually mention this article here. Although I focus on different aspects of it, because some are not very convincing.
Versioning one just smells to me like a mix of magical thinking and java-esque obsession with breaking changes. Not a great mix, tbh. Funny how adding D to foo “breaks client code” (it breaks compilation), but not adding D and throwing it anyway, breaks somebody code at runtime, but that is ok.
Scalability also seems like a problem with something else. So a subsystem throws 4-10 checked exceptions, but why not one? Maybe ADT Subsystem1Errors. Oh, sorry, no ADT in Java. Let’s do subclass of subsystem1, catch some of there, and rethrow less. Can’t be done. Oh, well.
So how many more programming languages, after PHP, Python, and JavaScript, have to become stunning successes before we convince ourselves that type systems are a bad idea? Oh, it is not 2003 anymore, and all of those have some form of type checking.
I don’t think whatever was half-baked into Java and C++ in the 90 should forever cast a shadow on that idea.
For one, checked exceptions are provided by libraries here, so no need to worry that standard library readfile
will annoy everybody forever.
The other thing is, in Haskell we do a lot of result types, especially in pure code, and many of those are checked exceptions in all but name.