I found this performance difference by benchmarking the two:

func IntAdd(words [][]byte) map[string]int {
    var m = make(map[string]int)
    for _, w := range words {
        m[string(w)] = m[string(w)] + 1
        
    }
    return m
}

func IntIncrement(words [][]byte) map[string]int {
    var m = make(map[string]int)
    for _, w := range words {
        m[string(w)]++
    }
    return m
}

IntAdd is obviously slower than IntIncrement.

On Wednesday, March 17, 2021 at 4:22:53 PM UTC-4 axel.wa...@googlemail.com 
wrote:

> Hi,
>
> have you verified this using a disassembler or benchmarks? Just asking 
> because this is, as far as I'm concerned, a job for the compiler, to 
> eliminate the overhead automatically - and I could well imagine that it's 
> already doing it. There definitely shouldn't be a new language construct 
> for this.
>
> On Wed, Mar 17, 2021 at 9:19 PM tapi...@gmail.com <tapi...@gmail.com> 
> wrote:
>
>> Now, to modify a map element, especially the element type is not a basic 
>> type, two hashes are needed to compute. This is often unnecessary and 
>> inefficient. For example:
>>
>>     package main
>>
>>     type T struct{
>>         N int
>>         // ... more fields
>>     }
>>
>>     func main() {
>>         var m = map[string]T{}
>>         m["foo"] = T{N: 0}
>>         
>>         // modify
>>         t := m["foo"] // first hashing
>>         t.N++
>>         m["foo"] = t  // second hashing
>>     }
>>
>> Will it be good to add a new builtin function, modify(m Map[Key]Value, k 
>> Key, func(v *Value)), to modify map elements with only one hash? A use 
>> example:
>>
>>     package main
>>
>>     type T struct{
>>         N int
>>         // ... more fields
>>     }
>>
>>     func main() {
>>         var m = map[string]T{}
>>         m["foo"] = T{N: 0}
>>         
>>         // modify
>>         modify(m. "foo", func(t *T) {
>>             t.N++
>>         })
>>     }
>>
>> -- 
>> 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...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/ba7b2c95-829b-4da4-916a-d53a06ec3428n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/ba7b2c95-829b-4da4-916a-d53a06ec3428n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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/d763c1fd-6e57-41f1-90e1-98a369ddf3bcn%40googlegroups.com.

Reply via email to