Go has been in existence for 10+ years and has fairly wide adoption in some 
areas - so it is not hard to make the case that generics are “not an important 
thing” - depends on what you are trying to do with it and what your perspective 
on “the right way” is.


> On Dec 31, 2020, at 10:54 AM, 'Axel Wagner' via golang-nuts 
> <golang-nuts@googlegroups.com> wrote:
> 
> On Thu, Dec 31, 2020 at 5:46 PM robert engels <reng...@ix.netcom.com 
> <mailto:reng...@ix.netcom.com>> wrote:
> I’ll state for the record again, I was originally very dismayed that Go did 
> not offer generics - after developing with it for a while that is far less of 
> an issue to me than the error handling.
> 
> Just to illustrate that the plural of "anecdote" isn't "data": I was 
> originally very vehemently opposed to generics in Go, but after using Go for 
> a bunch of years, I've been missing them often enough that I think they 
> provide a net-benefit (despite my criticism of this specific design).
> 
> Generics just isn't a "if you use Go long enough you learn they are not 
> important" thing.
> 
> 
>> On Dec 31, 2020, at 4:25 AM, 'Axel Wagner' via golang-nuts 
>> <golang-nuts@googlegroups.com <mailto:golang-nuts@googlegroups.com>> wrote:
>> 
>> Hi,
>> 
>> On Thu, Dec 31, 2020 at 8:59 AM wilk <w...@flibuste.net 
>> <mailto:w...@flibuste.net>> wrote:
>> If 95% of generics are collections the current draft is overkill.
>> What about a simplified version with only one generic type (like we do
>> with interface{}), without constraint as long as it can compile ?
>> 
>> • "Only one generic type" means you can't write generic maps or graph 
>> structures
>> • "Without constraints" means compilation cost goes up significantly (as the 
>> compiler needs to completely redo type-checking and compilation for each 
>> instantiation - instead of only checking that the function adheres to the 
>> constraints and the type-arguments fulfill it at each call-site. i.e. you 
>> make an NxM problem out of an N+M problem). It also makes good error 
>> messages very hard. And the constraints need to be documented anyway (in a 
>> comment, if nothing else), so that the user knows how to call the function - 
>> might as well have a standardized, machine-checkable way to express that.
>> 
>> So even *if* we only consider containers, the complexity of the design isn't 
>> accidental. There are very concrete (and IMO important) advantages to these 
>> decisions.
>> 
>> That being said, I also, personally, don't consider type-safe containers the 
>> main use-case of generics. It's certainly *one*, and one that can't be 
>> solved without them. I definitely see the advantage of being able to 
>> implement complex data-structures like lock-free concurrent maps or sorted 
>> maps as a library and use them in really performance-sensitive code-paths. 
>> But I also feel that my concerns about generics mainly stem from experiences 
>> with Java and C++ where *everything* was expressed in terms of abstract 
>> generic containers and algorithms, cluttering the code and requiring you to 
>> understand subtle differences between different implementations of the 
>> implementations of the abstract versions. So, personally, I really hope 
>> containers are *not* 95% of the use-case of generics. In fact, if type-safe 
>> containers *where* 95% of the use-case, I would still be very much opposed 
>> to adding generics - I don't think we really *need* type-safety for 
>> containers, as we are usually very well aware of what's stored in them.
>> 
>> Personally, the main use-case for generics I see (and I want to emphasize 
>> that everyone sees different use-cases as more or less important, depending 
>> on what kind of code they write) is the ability for concurrency as a 
>> library. I think channels and goroutines are great concurrency primitives - 
>> but they are primitives, that need to be composed to be useful. And this 
>> composition is usually very subtle and hard to get right. So being able to 
>> solve these composition problems once and re-use that solution, seems very 
>> exciting to me. But, again, that focus comes from the kind of code I write.
>> 
>> The third use-case I see for generics is to catch bugs by being able to 
>> express more complicated type-invariants in code. An example of that would 
>> be type-safety for context.Value 
>> <https://blog.merovius.de/2020/07/20/parametric-context.html> (or, similarly 
>> but subtly different, optional interfaces of http.ResponseWriter). However, 
>> for this use-case, I personally don't see the value-add vs. complexity 
>> tradeoff 
>> <https://blog.merovius.de/2017/09/12/diminishing-returns-of-static-typing.html>
>>  as very favorable - the type-system needs a *lot* more power to catch 
>> significantly more bugs and more power translates into a lot of complexity.
>> I don't think the current draft lets us express very powerful invariants. 
>> And while I wouldn't really advocate to make that a target, I think it would 
>> be interesting to see more discussion of this area - i.e. more case-studies 
>> of where Go has type-safety problems and if the current design can address 
>> them.
>> 
>> 
>> func add(x, y GenericType) GenericType {
>>   return x + y
>> }
>> 
>> add(1,2) // add can compile : func add(x, y int) is generated
>> add("abc", "def") // can compile : func add(x, y string) is generated
>> 
>> add(1, "abc") // two differents type : error
>> 
>> GenericType will be like interface{} but instead of casting it'll
>> generate on the fly, at compile time the function with the type of each
>> functions call.
>> I believe it's too easy and i miss something already discussed...
>> 
>> -- 
>> wilk
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com 
>> <mailto:golang-nuts%2bunsubscr...@googlegroups.com>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/rsk0bb%24tg6%241%40ciao.gmane.io
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/rsk0bb%24tg6%241%40ciao.gmane.io>.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com 
>> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGDOqWgEE2a_B9%2BqXftPc6ebBPcs_DcpsrqOvR%2BpCZ9SQ%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGDOqWgEE2a_B9%2BqXftPc6ebBPcs_DcpsrqOvR%2BpCZ9SQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFp0ozY5BAUudH-upa7neRjdtUQ%2Bk-o-%2BGox0q0%2BhJwEQ%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFp0ozY5BAUudH-upa7neRjdtUQ%2Bk-o-%2BGox0q0%2BhJwEQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/928F4805-B2B9-46CE-AEC9-DAEB260C3889%40ix.netcom.com.

Reply via email to