I fail to see how that is saying that abstraction and usability are overrated. They're not. They're important.
I fail to see how that is saying that abstraction and usability are overrated. They're not. They're important.
https://en.wikipedia.org/wiki/Component-based_software_engin...
https://www.amazon.com/Component-Software-Object-Oriented-Pr...
I can not write a function dealing with arbitrary values.
Somethind I’d do in Java with
public static <T extends IIncrementable> T increment(T val) { val.increment(); return val; }
is impossible to do in Go.You can not abstract over types, and write metric fucktons of duplicated code. I’ve tried porting some of my Java code, and it quickly grew to some classes being duplicated hundreds of times, once for every type. Fixing bugs became a nightmare.
Who would have thought. Maybe a rewrite would have been more appropriate.
But I still ended up with the same classes replicated hundreds of times.
Polymorphic code is not possible in any other way in go – you always have to duplicate the code.
Your example intrigues me, isn't an interface enough?
Is what bother you that the return value won't be typed T but IIncrementable in go?
My system is usually designed that I provide a function that generates a value of type T, a function to filter T (T -> boolean), and a way to display Ts.
So, the library now gets these functions, and does all the filtering on other threads.
So either I have to replicate the entire async code for every type, or I can’t keep type safety.
That’s the same mistake C did with void, Java did with Object and corrected with generics in 1.5, just called interface{} this time.
And while with python and Java, even if I circumvent the type system, I can still use annotations (see typed python, or JetBrains @Contract, Google’s @IntRange, etc), with Go I have nothing of that sort.
Types are useful to provide safety, if your type system has to be turnt off, then I am losing all that safety, and might as well code in PHP (although they also* saw that mistake, and are fixing it now, with 7.0 and later).