Size: a a a

2020 June 09

p

pragus in Go-go!
Andrey S
куда прыгаем?
я про false sharing, короче.
источник

k

koder in Go-go!
есть какой-нить линтер, который проверяет, что в канал не посылается адресс локальной переменной?
источник

VY

Vladyslav Yarema in Go-go!
Ivan Remen
Ну или с экспоненциальной задержкой в идеале)
backoff не подходит? https://github.com/cenkalti/backoff
источник

DP

Daniel Podolsky in Go-go!
koder
есть какой-нить линтер, который проверяет, что в канал не посылается адресс локальной переменной?
Нет никаких локальных переменных
источник

k

koder in Go-go!
Daniel Podolsky
Нет никаких локальных переменных
ага, и ложки нет, и слоника
источник

DP

Daniel Podolsky in Go-go!
Тем не менее.
источник

k

koder in Go-go!
var x []Struct = ...
for _, y := range x {
   ch <- &y
}

это сслылка на локальную переменную и в этом коде бага
источник

DP

Daniel Podolsky in Go-go!
Да, но дело не в локальности
источник

DP

Daniel Podolsky in Go-go!
var x []Struct = ...
for _, y := range x {
   z := y
   ch <- &z
}


z - такая же локальная, а баги нет
источник

k

koder in Go-go!
ок, не будем прояснять термины
есть ли линтер, который умеет ловить передачу ссылки с алиасингом
источник

k

koder in Go-go!
Daniel Podolsky
var x []Struct = ...
for _, y := range x {
   z := y
   ch <- &z
}


z - такая же локальная, а баги нет
да, эта бага может проявится массой способов, но отловить другие врядли можно так просто
источник

DP

Daniel Podolsky in Go-go!
koder
да, эта бага может проявится массой способов, но отловить другие врядли можно так просто
именно эта - только одним, на самом деле.
источник

k

koder in Go-go!
писать любую переменную, которая передивает итерацию цикла
источник

k

koder in Go-go!
переменная вне цикла
источник

k

koder in Go-go!
переменная на уровне модуля
источник

k

koder in Go-go!
поле в структуре
источник

DP

Daniel Podolsky in Go-go!
ну, хорошо, двумя

1. передать куда-то указатель на переменную цикла
2. использовать переменную цикла в замыкании

все остальное приведет к копированию переменной
источник

DP

Daniel Podolsky in Go-go!
https://golangci-lint.run/usage/linters/ - вот этот список надо изучить
источник

k

koder in Go-go!
спасибо
источник

DP

Daniel Podolsky in Go-go!
оказывается - go vet это ловит :)
источник