> Actually, Javas primitive types led to numerous problems. It made wrapper
> classes necessary, which in turn made autoboxing necessary as it's a PITA
> to use otherwise...
Google Go has primitive types. However, you can add methods to them exactly the same way that you can add methods to structures. So you can do:
type foo int
func (f foo) DoSomething();
The fact that Java needs wrapper classes for this, and for other things, is a design limitation of Java, not of primitives themselves. It comes directly out of the inheritance-based design.
As far as "Java autoboxing" goes, I have always hated it. Hated it when they added it to the language, still hate it now. When the compiler starts implicitly generating functions for you like that, it's time to get out the barf bag.
> Nullable pointers are obviously a bad thing, as their effect of making
> something optional can be trivially obtained without a special language
Having a bool type is "obviously a bad thing," as you can obtain the same effect with ints. Oh wait, that argument is bogus.
This is just more "argument by assertion" on your part. I find NULL, or nil, or None, or whatever you call it, to be useful more often than it is not. And when I don't have it, I usually have to create some kind of special class value to represent "zero" which is usually just an annoyance.
The real WTF in Java is the lack of unsigned types, based no doubt on an argument similar to yours: it's "obviously a bad thing" to have uint32_t, because you can just use int64_t if you need 32 bits. Except for a little thing called efficiency, and who needs that?