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 [email protected]
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 [email protected] <[email protected]>
> 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 [email protected].
>> 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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/d763c1fd-6e57-41f1-90e1-98a369ddf3bcn%40googlegroups.com.