engelbart
Четсно говоря я про этот хеш вообще не понимаю
engelbart
у меня там просто map[string]int
engelbart
я сам хеши никакие не считаю ж
Daniil
я сам хеши никакие не считаю ж
Ну надо погуглить считает ли го и в какой момент
Daniil
Напиши на си/плюсах
Илья
gc?
engelbart
эти циклы объедитнни я мепов (сотни их) сжирают время
engelbart
293.28s 25.45% 25.45% 293.28s 25.45% runtime.memhash 216.45s 18.79% 44.24% 467.58s 40.58% runtime.mapassign1 186.18s 16.16% 60.40% 187.92s 16.31% runtime.mapiternext 149.46s 12.97% 73.37% 398.52s 34.59% runtime.mapaccess1_faststr 67.65s 5.87% 79.24% 1106.82s 96.06% validator.(*MetricString).Combine
Илья
http://jmoiron.net/blog/go-performance-tales/
Илья
если упирается именно в производительность map, то, и правда, придется переходить на int
Brown
Я думаю это просто выделение памяти
Daniil
если упирается именно в производительность map, то, и правда, придется переходить на int
Но если после сравнкния хэша на инте нельз сравнить и саму строку - бесполезное чтото получается
engelbart
хеш на интах подразумевает же словарик где то ряом, так ведь?
Илья
хмм, да, но по нему бегать так часто не придется
Илья
по идее
engelbart
ну пореже, да.
Daniil
Так а как мапа на го работает кто-нибудь вкурсе?
engelbart
откуда ж
George
https://golang.org/src/runtime/hashmap.go
Ildar
Кстати, интересно. Dropbox начинали свою разработку на Go, потом отказались от него. Почему?
Mike
Например, посмотрели на цены инженеров
Aleksandr
А когда они успели отказаться?
Ildar
Недавно был на докладе, там говорилось, что они от него ушли, или частично отказались.
Aleksandr
А ссылку можно?
engelbart
Да, верно, все ж открыто
dev_sheep
Ребята, вот как правильно сделать: есть реп на гитхабе, в котором лежит один проект. Но на Java. Сейчас этот же проект я полностью переписал на Go со всеми улучшениями и дополнениями. Эту, так скажем v2.0 запихнуть в тот же реп в другую ветку или в новый реп?
dev_sheep
понял, спасибо :)
Ivan
понял, спасибо :)
не за что! Обращайся еще 😃
dev_sheep
👍😊
Alexei
я тоже за новый реп, реп2 )
dev_sheep
:D
dev_sheep
новая жизнь
dev_sheep
репорт кард оценил в NOT BAD
dev_sheep
осталось комменты проставить и A+ будет :D
dev_sheep
golint постоянно ругает за них, подлец
Илья
а в проекте написать ABANDONED DEPRECATED PLEASE LEAVE!
dev_sheep
😂
dev_sheep
Прямо капсом
dev_sheep
Спасибо, кстати, за советы :3
Dmitriy 😎
Добрый день. Не подскажите? В golang планируются дженерики в новых версиях?
engelbart
нет
Pauline
что такое дженерики?
Pauline
Шаблоны (templates) в Си++ это частный случай обобщённых типов (generic types). Обобщённые типы в Си++ очень мощные, Тьюринг-полные. Вы, например, можете вычислять числа Фибоначчи во время компиляции с помощью шаблонов Си++.
Pauline
это?
Slava
Дима сразу с козырей зашёл
Slava
это всё домыслы, вопрос был планируется ли - ответ, нет, не планируются
Мерль
Увы
Daniil
гошники, помогите плс. Когда я пишу func (p *MyType) f() { return *p } происходит копирование же?
Dmitriy 😎
А мы можем сделать свой форк Go с дженериками?
Daniil
еще у меня есть type M interface { Create() (*M, error) } я хочу его использовать так var m M .... someM := m.Create() someM.Create() <- compile error (pointer to interface not an interface) как вообще правильно пистаь такие штуки? Вся суть метода Create() в том что он может вернуть или указатель на объект от которого его и вызывают (m) или на новый интсанс какого-то типа данных... ЧЯДНТ? Понятно чего хочу добиться или как-то иначе расписать?
Dmitriy 😎
@matrixd , ты пытаешься вернуть указатель на интерфейс. Так как M – это интерфейс, то возвращать нужно просто M
Oleg
гошники, помогите плс. Когда я пишу func (p *MyType) f() { return *p } происходит копирование же?
Если MyType - структура или примитивный тип - да. Если еще тип возвращаемого значения у функции написать правильный.
Dmitriy 😎
Мне понравился rust, но проблема там в том, что поддержка от IDE скудная... а из-за этого любая мелкая программа намного тяжелее пишется
Daniil
@matrixd , ты пытаешься вернуть указатель на интерфейс. Так как M – это интерфейс, то возвращать нужно просто M
а у меня не произойдет копирования? type M interface { Create() (M, error) } type K struct { v int32 } func (k *K) Create() (M, error) { return *k, nil } ?
Daniil
или я вообще все не так понимаю и это не взлетит даже?
Oleg
или я вообще все не так понимаю и это не взлетит даже?
Не взлетит, потому что K и *K - разные типы. K не имплементирует M, а *K - имплементирует.
Dmitriy 😎
измени return *k, nil на return k, nil
Daniil
и тогда копирования не будет?
Dmitriy 😎
тогда не произойдет копирования и взлетит
Dmitriy 😎
да
Dmitriy 😎
тебе нужно копирование?
Daniil
а если захочу то делаю func (k *K) Create() (M, error) { copy := *k return &copy, nil } и будет копия?
Dmitriy 😎
Да
Daniil
тебе нужно копирование?
я хочу написать так чтобы это было деталью реализации. т.е. тот кто работает с интерфейсом не знает копирование там, инициалзация или возврат указатель на уже созданный объект
Dmitriy 😎
Тогда описанный тобой выше метод подходит
Dmitriy 😎
для твоей цели
Daniil
окей, спасибо
Dmitriy 😎
Ну да, целесобразность такого интерфейса – это уже другой вопрос)
Daniil
Что за интерфейс такой, если не секрет? :)
для обращения к бд. Может будет работать все приложение на одном коннекте, может будет асинхронно а соединения будут под капотом, может...