The difference between an empty slice and a nil slice is one of the most inexplicable (to me) warts of the language, especially since it doesn't apply to anything else (maps can't be nil, nil and empty interfaces actually have different properties).
Anyway, I do agree that using `nil` as a base case for all types would introduce more confusion. What I think could be useful would be a `default` keyword for this:
var x int
x = default
if x == default {
this is true
}
This would obey rules similar to `iota` in terms of its integration into the language.
If in the proposal (x==nil) == false then we get the ridiculous position where:
which seems ridiculous.Though the other case, of returning true, also seems ridiculous, because nil and 0 are not the same thing at all.