| > You can not have a custom collection class containing objects _only_ of a certain type. For example ConcurrentHashTable<Int, String>. I'll start by saying - I largely agree with you. Libraries, particularly of data structures, are the biggest weakness of Go as a language. However, this bit is not really fair: > When you ask a Java programmer, or C# programmer or Haskell programmer or Swift programmer or... what they would change in the language you do not get the answer: remove generics. Much like values, language features need to be compared to each other, not evaluated in isolation. Everyone likes loyalty, but some people value it over honesty and some value the reverse. Everyone likes generics, but some people value faster compile times, a more simple language implementation and a lower learning curve more. Some people value it less. |
If you wanted a simpler language, you would not make slices and hash tables generic, would you?
If you wanted lower learning curve, you would not make special case generics would you?
If you wanted to wait, to get the perfect generic solution because a sub-optimal one is not good enough, you would not create a sub-optimal non-perfect temporal solution with special-cased generics for certain data types would you?
If you argue that I am loyal and not honest, and therefore like generics because it is used in my favorite language, I think you are wrong.
The languages I use most of the time have a huge design flaw. It is called null. But when they created Go they chose to (except in special cases) get rid of (useful) generics instead of the disaster that is null.
The problem is that Go has not learnt from other languages. It is too imperative, not expressive enough, lacking in static typing and horrible at fault handling.