PS

Also, *[]T* and *map[K]V* does not look consistent, so I don''t think this 
> is a true valid reason:

I didn't mean they are inconsistent. They just don't look consistent at the 
first glance. 

суббота, 20 июня 2020 г., 19:06:14 UTC+3 пользователь Denis Cheremisov 
написал:
>
> I like it. Poor VSCode users will suffer from the current approach and all 
> these ((())))) – this thing can't even highlight types of function 
> parameters. Your variant is a lot (I mean a LOT) more readable 
>
> Also, *[]T* and *map[K]V* does not look consistent, so I don''t think 
> this is a true valid reason:
>
> In Go we write []int, not [slice int], and we write map[int]int, not [map 
>> int int].
>>
>
> суббота, 20 июня 2020 г., 11:02:05 UTC+3 пользователь Wu Kulics написал:
>>
>> Thank you for your reply. I did mention this suggestion on [Github](
>> https://github.com/golang/go/issues/36457) before, but then everyone's 
>> focus was on the backend.
>>
>>  
>>
>> In the previous map and slice examples, [slice int] and [map int int] are 
>> just for reference. I think this syntax is very similar to []int and 
>> map[int]int, which is very suitable for everyone to understand the generic 
>> design of Go, we do not need to change the previous syntax.
>>
>>  
>>
>> The design of identifier(type T) will lead to too many () in the end, 
>> especially when defining the receiver function. This change in readability 
>> undermines Go's original goal. We still want to see simple and clear code 
>> on Go, not many ().
>>
>>  
>>
>> I have studied in detail the generic design of Go proposed by others. So 
>> far, [identifier T] is the only solution that to avoid <>, without 
>> increasing the number of characters, without adding keywords, without 
>> ambiguity, without reducing readability, without increase the workload, and 
>> continues the original grammatical design.
>>
>>  
>>
>> I hope this design can attract enough attention, or at least it can cause 
>> some discussion.
>>
>>  
>>
>> *发件人**: *Ian Lance Taylor <ia...@golang.org>
>> *日期**: *2020年6月20日 星期六 上午3:03
>> *收件人**: *Wu Kulics <kul...@outlook.com>
>> *抄送**: *"golan...@googlegroups.com" <golan...@googlegroups.com>
>> *主题**: *Re: [go-nuts] Generic syntax suggestions
>>
>>  
>>
>> On Fri, Jun 19, 2020 at 10:24 AM Wu Kulics <kul...@outlook.com> wrote:
>>
>> Dear Go Design Team:
>>
>>  
>>
>> Recently I explored a new generic syntax in the [Feel](
>> https://github.com/kulics-works/feel 
>> <https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fkulics-works%2Ffeel&data=02%7C01%7C%7C44033f9f1d204eb2584d08d814838012%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C637281902309384232&sdata=VGm2RHSKdaISaqpa01InrUlDndPWWaEvAVlUlbcNLB8%3D&reserved=0>)
>>  
>> language that I designed, because Feel borrowed a lot of grammar from Go, 
>> so this Generic syntax may also have some reference value for Go.
>>
>>  
>>
>> The `identifier<T>` problem is that it conflicts with comparison 
>> operators and also bit operators, so I don't agree with this design.
>>
>>  
>>
>> Scala's `identifier[T]` has a better look and feel than the previous 
>> design, but after resolving the above conflict, it has a new conflict with 
>> the index design `identifier[index]`.
>>
>> For this reason, the index design of Scala has been changed to 
>> `identifier(index)`. This does not work well for languages that already use 
>> `[]` as an index.
>>
>>  
>>
>> In Go's draft, it was declared that generics use `(type T)`, which will 
>> not cause conflicts, because `type` is a keyword, but the compiler still 
>> needs more judgment when it is called to resolve the` 
>> identifier(type)(params) `. Although it is better than the above solutions, 
>> it still does not satisfy me.
>>
>>  
>>
>> By chance, I remembered the special design of method invocation in OC, 
>> which gave me inspiration for a new design.
>>
>>  
>>
>> What if we put the identifier and the generic as a whole and put them in 
>> `[]` together?
>>
>> We can get the `[identifier T]`. This design does not conflict with the 
>> index, because it must have at least two elements, separated by spaces.
>>
>> When there are multiple generics, we can write `[identifier T V]` like 
>> this, and it will not conflict with the existing design.
>>
>>  
>>
>> Substituting this design into Go, we can get the following example.
>>
>> E.g.
>>
>> [image: 手机屏幕的截图 描述已自动生成]
>>
>>  
>>
>> This looks very clear.
>>
>>  
>>
>> Another benefit of using `[]` is that it has some inheritance from Go's 
>> original Slice and Map design, and will not cause a sense of fragmentation.
>>
>> [image: 手机屏幕的截图 描述已自动生成]
>>
>>  
>>
>> We can make a more complicated example
>>
>> [image: 手机屏幕截图 描述已自动生成]
>>
>>  
>>
>> This example still maintains a relatively clear effect, and at the same 
>> time has a small impact on compilation.
>>
>>  
>>
>> I have implemented and tested this design in Feel and it works well. 
>>
>>  
>>
>> I think Go’s current generic syntax will eventually render the code too 
>> many `()`, so that the readability is destroyed when coding, and the goal 
>> of simplicity is lost.
>>
>>  
>>
>> In addition to the way of `[identifier T]`, I have also tested the syntax 
>> of `<identifier T>`. After doing some special processing on `>>`, it can 
>> also avoid ambiguity. This is closer to the mainstream `identifier<T>` 
>> grammar, and it is easier to lower the learning threshold for users of 
>> other languages.
>>
>>  
>>
>> Thank you very much for reading this email, I hope it will bring 
>> reference value to the Go community.
>>
>>  
>>
>>  
>>
>> Thanks for the suggestion.  I feel like I've seen this somewhere before, 
>> perhaps also from you.
>>
>>  
>>
>> For me personally, it doesn't feel quite right, for the reasons shown in 
>> your map and slice rewrite.  In Go we write []int, not [slice int], and we 
>> write map[int]int, not [map int int].  We can talk about what it looks like 
>> if we write the latter variants, but it's years too late to change the 
>> language in that way.  So while the suggestion does seem workable, it 
>> doesn't feel quite like Go syntax to me.
>>
>>  
>>
>> But I would be happy to hear other opinions.  Thanks for writing it.
>>
>>  
>>
>> 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/ac5929cc-2bd3-463c-b57e-0755ff9ce97co%40googlegroups.com.

Reply via email to