Personally I don't think a completely, um, generic version of generics is 
needed.  But something like a list comprehension, possibly specifically 
limited to "select"/"map" type comprehensions which do not change slice or 
map length, would be invaluable.  There's already a lot of special magic 
around slices and maps, so adding more wouldn't be as world-changing as 
adding it everywhere else (in both good and bad ways), while enabling one 
to write a lot of useful list-processing utilities once instead of several 
times.  Since most of real-life software engineering turns into list 
processing at some point, that would be super nice.

On Friday, August 4, 2017 at 9:30:43 PM UTC-7, Lucio wrote:
>
> We know how to deal with that without generics. But how would you define 
> generics to address that more elegantly than you would with already 
> available Go constructs (type assertions)?
>
> Lucio.
>
> On Saturday, 5 August 2017 01:48:28 UTC+2, T L wrote:
>>
>> A case:
>>
>> func iterateAndCopy(slice []T, p *T) {
>>     for _, v := range slice {
>>         *p = v
>>     }
>> }
>>
>> func Benchmark_CopyCosts(b *testing.B) {
>>     b.Run("bool-4", func(b *testing.B){
>>         iterateAndCopy(make([]bool, 4), new(bool))
>>     })
>>     b.Run("int32-4", func(b *testing.B){
>>         iterateAndCopy(make([]int32, 4), new(int32))
>>     })
>>     b.Run("int64-4", func(b *testing.B){
>>         iterateAndCopy(make([]int64, 4), new(int64))
>>     })
>>     b.Run("[128]int-4", func(b *testing.B){
>>         iterateAndCopy(make([][128]int64, 4), new([128]int64))
>>     })
>>     b.Run("struct{a,b,c,d int32}-100", func(b *testing.B){
>>         iterateAndCopy(make([]struct{a,b,c,d int32}, 100), 
>> new(struct{a,b,c,d int32}))
>>     })
>>     b.Run("bool-100", func(b *testing.B){
>>         iterateAndCopy(make([]bool, 100), new(bool))
>>     })
>>     b.Run("int32-100", func(b *testing.B){
>>         iterateAndCopy(make([]int32, 100), new(int32))
>>     })
>>     b.Run("int64-100", func(b *testing.B){
>>         iterateAndCopy(make([]int64, 100), new(int64))
>>     })
>>     b.Run("[128]int-100", func(b *testing.B){
>>         iterateAndCopy(make([][128]int64, 100), new([128]int64))
>>     })
>>     b.Run("struct{a,b,c,d int32}-100", func(b *testing.B){
>>         iterateAndCopy(make([]struct{a,b,c,d int32}, 100), 
>> new(struct{a,b,c,d int32}))
>>     })
>> }
>>
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to