There is a whole raft of ways to deal with nil, 0, NULL, NaN, etc. And of course different languages do it differently, primarily because of different requirements and/or aesthetics. Just because you don't you don't agree with the choices doesn't mean it isn't well designed, if it achieves the goals set forth then it is well designed. Disagreeing with the goals is a different (although related) issue.