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.

Reply via email to