I assume you mean primitive data types not being first-class objects? When Java was born, Smalltalk had a very long history of Ints and Chars being first class objects. The VM/byte-code compiler took care of in-lining values to make their time/space behavior as if they were primitive data types.
Also, Java was originally targeted at very low end machines - think WebTV. IMO, the top things wrong with Java are:
Too many concepts that overlap - containers, arrays, generics, iterators, classes, interfaces, etc. An important factor in whether you want to use a language is "how many concepts am I going to have to understand to read other peoples code ?"
A lot of the library is very poorly designed, probably because they rushed it out the door. Take a look at the GUI inheritance hierarchy for instance. Also, a lot of the code looks like C code IIRC.
Comments
"Primitives made sense at the time"
I assume you mean primitive data types not being first-class objects? When Java was born, Smalltalk had a very long history of Ints and Chars being first class objects. The VM/byte-code compiler took care of in-lining values to make their time/space behavior as if they were primitive data types.
Also, Java was originally targeted at very low end machines - think WebTV. IMO, the top things wrong with Java are:
Too many concepts that overlap - containers, arrays, generics, iterators, classes, interfaces, etc. An important factor in whether you want to use a language is "how many concepts am I going to have to understand to read other peoples code ?"
A lot of the library is very poorly designed, probably because they rushed it out the door. Take a look at the GUI inheritance hierarchy for instance. Also, a lot of the code looks like C code IIRC.