Understood. Even if you keep operators they could be mapped to certain built in interface methods. C++ has operator loading, Java does not (except for auto-boxing) It seems Go generics are trying to play in the middle and I think the end result is going to lead to confusing code, but we shall see.
> On Aug 8, 2020, at 11:16 AM, Ian Lance Taylor <i...@golang.org> wrote: > > On Fri, Aug 7, 2020 at 6:54 PM Robert Engels <reng...@ix.netcom.com> wrote: >> >> I’d really like to see an example of generic code that takes both string and >> numeric types that uses operators. Sorting/searching is one but as I already >> said the built in string operators are not sufficient for collation cases. >> >> Even generic code that “only works on unsigned types”. >> >> More than 90% of all generic code is collections. Operators are not needed >> for these. > > I don't think I have anything useful to add to what I've said already > on this topic. > > I believe that being able to write a Min function in ordinary Go is an > absolute requirement for generics in Go. Full stop. > > It would be great to hear about any fatal problems that type lists > have. It would be great to hear about alternative approaches that > support operators. I don't think it's useful to debate whether we > need to be able to use operators in generic code. > > Ian > > > >>>> On Aug 6, 2020, at 2:45 PM, burak serdar <bser...@computer.org> wrote: >>> >>> On Thu, Aug 6, 2020 at 1:17 PM Ian Lance Taylor <i...@golang.org> wrote: >>>> >>>>> On Thu, Aug 6, 2020 at 12:10 PM Robert Engels <reng...@ix.netcom.com> >>>>> wrote: >>>>> >>>>> We’ll probably agree to disagree there. Java has a lot of generic code >>>>> written and it’s never been a problem (using methods). Rarely can you >>>>> write code that treats + the same no matter if passed a string or numeric. >>>>> >>>>> Even operators like < with strings don’t really make a lot of sense >>>>> because different collations are used. >>>>> >>>>> I think having a higher bar for Go generic implementations is fine - >>>>> writing generic code properly is harder than regular Go - there’s much >>>>> more to resin about. >>>> >>>> I hope that is not the case. >>>> >>>> Also, it's important that it be easy to read generic code. We can put >>>> extra burdens on writers of generic code if necessary, but we must >>>> make the burden on readers of generic code as small as we possibly >>>> can. >>>> >>>> And again: is the complexity from requiring methods rather than >>>> operators really less than the complexity of using type lists? >>> >>> There are things you can do with type lists that you cannot do with >>> operators. You can limit a function to run on unsigned numbers, for >>> instance. I think it also makes it explicit to the reader that >>> a.Add(b) is possibly more complicated than a+b. >>> >>>> >>>> Ian >>>> >>>> >>>> >>>>>> On Aug 6, 2020, at 1:53 PM, Ian Lance Taylor <i...@golang.org> wrote: >>>>>> >>>>>> On Wed, Aug 5, 2020 at 8:52 PM Robert Engels <reng...@ix.netcom.com> >>>>>> wrote: >>>>>>> >>>>>>> I understand your point, but I think a few minor corrections Make a >>>>>>> difference - it does not matter that String supports + and not - , a >>>>>>> string would not be a Number. String concatenation is not addition. >>>>>> >>>>>> My point wasn't that a string is a number. My point was that the >>>>>> current design draft permits writing a function that uses + and works >>>>>> with both strings and numbers. If we adopt something along the lines >>>>>> of what you are suggesting, we must either define a name for "types >>>>>> that support +" or we must say "you can't write a generic function >>>>>> that uses + and works with both strings and numbers." >>>>>> >>>>>> >>>>>>> There are also several ways to implement “ordering” with complex >>>>>>> numbers, even between complex and rational - it’s all a matter of >>>>>>> definition. There is also the possibility to make complex not a >>>>>>> Comparable (compile time failure). >>>>>> >>>>>> In Go, the types complex64 and complex128 do not support the < <= >= > >>>>>> operators. That is what I mean when I say that the complex types are >>>>>> not ordered. I'm not sure it matters that it is possible to define >>>>>> some ordering on complex numbers; the point is that the language >>>>>> defines no such ordering, so if you need to use ordering operators you >>>>>> can't use complex types. >>>>>> >>>>>> >>>>>>> You write the generic code using methods not operators in all cases. >>>>>> >>>>>> Ah, I didn't understand that. I think that is a non-starter. I think >>>>>> it is a requirement that people be able to write (and read) Min as >>>>>> >>>>>> if a < b { >>>>>> return a >>>>>> } >>>>>> return b >>>>>> >>>>>> Saying that you must write this as, e.g., >>>>>> >>>>>> if a.Less(b) { >>>>>> return a >>>>>> } >>>>>> return b >>>>>> >>>>>> means that the generic language is not the normal language. That adds >>>>>> a massive layer of complexity to using generics: you can no longer >>>>>> write ordinary Go code for generic functions, you have to write in >>>>>> this alternative language that is harder to write and harder to read. >>>>>> You also have to remember a bunch of names for the methods that >>>>>> correspond to the operators. The design draft works very hard to >>>>>> avoid these issues. >>>>>> >>>>>> In particular, I think that making that requirement would be adding >>>>>> much more complexity to the language than we get by adding type lists. >>>>>> >>>>>> Ian >>>>> >>>> >>>> -- >>>> 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/CAOyqgcWuPNgz%2B1Yz71_xpq6sHEw77EXYhcmSFwQAwE7iZhV5bw%40mail.gmail.com. >> > > -- > 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/CAOyqgcWoeG%3DC68c-kr10ED7u-jFasx14vhzhuwCOmpN-uNWuTw%40mail.gmail.com. -- 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/B3268557-3193-4B92-8664-DC8DD249C3A8%40ix.netcom.com.