Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Not having generics reduces explicitness (because you don't specify the types of your containers) and reduces safety (because of all the casts and manual implementations of things like swap functions).


On the other hand, C++ templates sometimes make it hard to understand which function ends up getting called, what size a particular type actually has or what is an alias for what.

There are too many indirections to follow manually. All I know is that the compiler will select some function that has conforming types. The compiler is very very smart. It knows all the incredibly complicated name resolution rules and it will use each one of them.

Unfortuntately I'm not as smart. Even after more than 20 years of using C++ I sometimes fail to anticipate which function the compiler decides to use. And that is not safe.

In fact it is less safe than casting interface{}, because that will at least fail fast at runtime instead of silently doing something unexpected.


It is possible to have generics without having the specialization rules of C++.


You're criticizing ADL, not generics.


It's true that I'm not criticising generics in general, but ADL is only part of what makes C++ templates so treacherous.

I think Go needs some form of generics. Every statically typed language does. But after C++ I do understand the hesitation on the part of Go's creators.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: