Yikes. This C# article makes an interesting point about gradually-typed and type-inferencing programming languages that hadn’t occurred to me before. If you trust your compiler to figure out types automatically from context, then adding new methods to a class can change that compile-time calculation.

In Java, where there is no automatic type inference, it’s common knowledge that adding a new non-overloaded method to a class is safe. So I hadn’t seen this context-sensitive compilation problem in a “static” language before. Dynamic (that is, runtime-typed) languages don’t have this problem either because the compiler makes no assumptions about the types and defers method binding to the last possible moment.