> First, the null pointer is essentially inevitable if you want to model the world, which has references (things containing denotations of other things).
I took major exception to this. The real world doesn't have non-things, and references do not demand to refer to non-things.
If your domain does actually have the concept of null, just make a type for it. Then you won't accidentally use a 6 or a "foo" where a null was demanded.
And I would just add:
Do we want to model the "real world"? This seems to hark back to that long-forgotten world of "animal-cat-dog" OO programming.
The real world is full of relationships that may or may not exist. What’s the referent of “my spouse” if I’m unmarried?
Is your point here that every pointer type for which this can be the case should include an explicitly typed null value?
Tony Hoare himself said that it wasn't needed in the type system he'd created. He added it because it was so easy to do so and couldn't resist the temptation.
OTOH seeing undefined method 'blah' for nil:NilClass isn't really any better.