I'd say a dot is necessary when instantiating a function call but unnecessary when instantiating a type because it's always syntactically clear when a type is required.
ut 21. 7. 2020 o 18:51 <ahmadelsh...@gmail.com> napísal(a): > Using angle brackets is not a must for supporting generics, but it is the > common syntax of generics in programming languages that support generics, > the same way as square brackets are the common syntax for indexing in > programming languages. > > If I understand correctly, the ambiguity problem with angle brackets > appears only at instantiation, so if we prefixed all the angle brackets > occurrences with a dot(.) that ambiguity would gone. > > Although prefixing the angle brackets with a dot(.) in all occurrences is > not required and maybe removed from some places and/or be required only for > instantiation. > > The common use for the dot(.) in programming languages is to access some > field or property of the entity it's called on, and that would be the > same(in instantiation case), cause we would be accessing the specific > function, or the specific type of the generic function or the generic type, > respectively, so that common understanding about the dot(.) would still > hold, in my opinion. > > If I understand correctly(and please correct me if I am wrong) the dot(.) > in that approach doesn't introduce any ambiguity and would require only one > lookahead(to see if the following char is the left angle bracket or not), > so it should be acceptable. > > example: > > package list > > type List.<E> struct { // the dot(.) maybe remove here > // some code > } > > type FloatList List.<float64> // the dot(.) has to exist here > > func NewList.<E>() (list List.<E>) { // the dot(.) maybe remove here > // some code > } > > func NewListFrom.<E>(arr []E) (list List.<E>) { // the dot(.) maybe > remove here > // some code > } > > func(l List.<E>) Add(newElem E) { // the dot(.) maybe remove here > // some code > } > > package main > > func main() { > l := list.NewList.<int>() // the dot(.) has to exist here > l.Add(1) > var arr []int > intList := list.NewListFrom(arr) // type inference is done here, > so the dot(.) doesn't exist here > } > > -- > You received this message because you are subscribed to a topic in the > Google Groups "golang-nuts" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/golang-nuts/7t-Q2vt60J8/unsubscribe. > To unsubscribe from this group and all its topics, 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/0b206c05-e10c-48a4-b641-cb29209b9df5o%40googlegroups.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/CAO6k0uu8hE2MmavFUjVZALkxPEYPTOr10Cp%3DYj6oE0%2BOt1GEQw%40mail.gmail.com.