I read the proposal and am very impressed by it. I have 3 concerns however.
1. `F(type T)(p T) { ... }`
To me, having 2 or 3 sets of parentheses is very weird. All mainstream
programming languages have only 1 set of parentheses for the function's
arguments. I've never seen 2 before. I know the proposal says the authors
of the draft considered other common symbols including colon. *I still
think `::` seems nicest.*
2. Expanding interfaces to include fields
Currently interfaces can dictate methods only. The proposal also adds type
lists.
*I propose that for the purposes of generics, the interface also defines
fields.* This has been rejected numerous times for interfaces (as it is
now), but for generics, I think it will greatly enhance the power given to
developers whilst honouring the intention/spirit of the proposal.
See Typescript for guidance. They have successfully implemented interfaces
that can define fields, type lists and method names in their contracts. The
team at Microsoft obviously saw a use for it.
3. Compile time.
I started using Go around Go1.3 (the C compiler days). Back then compiling
was blink-of-an-eye fast. I used it as a selling point to everyone I met at
meetups (there was minimal uptake of Go back then so it was meetups for
other languages). Now the compiler is fast but for moderate size projects,
it's no longer blink-of-an-eye fast. I don't bother hyping this feature any
more.
Obviously based on how generics is implemented, the compiler will again be
slower.
*I propose a compile flag so that when developing all the generic type
checking etc is done at run-time (default behaviour). When ready to build
for production, a compile flag can use used to move the type checking to
happen at compile time.*
Thanks for your time,
- pjebs
--
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/c0a3a6a2-0c73-4246-ac0b-56da96210ffdo%40googlegroups.com.