Ivan
Коллеги, а есть у кого-то примеры передачи через cgo char**?
Ivan
нужно из сишки салоцированую строку вернуть
Евгений
Вот это наброс на вентилятор https://go.googlesource.com/proposal/+/master/design/go2draft-generics-overview.md
Roman
Вот это наброс на вентилятор https://go.googlesource.com/proposal/+/master/design/go2draft-generics-overview.md
вы аргументировать собираетесь, сударь?)) или вам бы лишь свои 2 копейки обмазанные в, извиняюсь, шоколаде вставить
A
Чем вам включение типов не наследование
Anonymous
Чем вам включение типов не наследование
ну типа во включаемом типе нельзя управлять абстрактно типом, который включает
Anonymous
Ну, по-моему это наследования никак не касается
по-моему это одна из ключевых разниц между наследованием и встраиванием
A
по-моему это одна из ключевых разниц между наследованием и встраиванием
Если не лень, я был бы рад почитать что нибудь касательно этого утверждения
A
Я же правильно понимаю, предок должен быть осведомлён о потомке, и мочь вызывать его методы и всякое такое?
Aleksandr
Вот это наброс на вентилятор https://go.googlesource.com/proposal/+/master/design/go2draft-generics-overview.md
В этом весь го. Вроде вот тебе текст, а на мобильном хрен прочтешь. А через год все будут считать что адаптивный дизайн не нужен.
Anonymous
что-то навскидку лучше не нагуглилось, а сам не могу что-то адекватное придумать)
arkady
коллеги, скажите пожалуйста, какие инструменты мне нужно знать, чтобы претендовать на должность мидла?
Евгений
вы аргументировать собираетесь, сударь?)) или вам бы лишь свои 2 копейки обмазанные в, извиняюсь, шоколаде вставить
Какие аргументы хотите? Технические? Мне нравится предложение, действительно сократит кол-во копипасты. Хотя конечно надо понимать, чтоб до релиза оно может доехать в совсем другом виде. Но пока выглядит достойно, читаемо. Гораздо интереснее наблюдать какие бурления ваших шоколадов начнутся в сообществе. Ну а во что макать - думаю, сами разбиретесь;)))
Мерль
коллеги, скажите пожалуйста, какие инструменты мне нужно знать, чтобы претендовать на должность мидла?
ИМХО нужны не инструменты, а умение выполнять и заканчивать проекты в рамках бизнес-требований заказчика
Daniel
вообще - пока даже задачу, в которой генерики были бы уместны (кроме коллекций) никто не сформулировал
Daniel
последняя попытка была про тип-сумму, а не про генерики
Daniel
да вот я не очень понимаю, зачем они нужны именно в генерализованном виде
Daniel
это же про code reuse
Roman
да вот я не очень понимаю, зачем они нужны именно в генерализованном виде
затрудняюсь ответить, лично я за 2 года работы на Go пока не встречал прям проблемы с генериками, но это лично я, у меня задачи не особо с этим связаны. Имплементировать парочку функций интерфейса для пары типов было не особо проблематично
Roman
самое главное уже завезли, т.е. версионирование. С ошибками могу жить, со стандартныим генериками пока-что тоже
Roman
было бы конечно прикольно если они придумали языковую конструкцию для сокращения кода обработки ошибок, но я чёт пока это вообще не представляю, как это возможно и возможно ли вообще
Мерль
да вот я не очень понимаю, зачем они нужны именно в генерализованном виде
пока они не нужны вообще — то конечно не нужны и в генерализованном типе вы их не видите, потому что на Go их никто не пишет почти, кроме некоторых фанатиков а как только нужны какие-нибудь графы направленные, где у тебя ноды могут быть ещё и разного типа, так у тебя Go превращается в мешанину кастов, тайп свитчей и пустых интерфейсов да и просто можно поглядеть на такие прекрасные конструкции как map[string]interface{} на каждом месте, где надо работать с динамическими данными, и которые взрывается потому что где-то в глубине вместо int кто-то положил json.Number и ты не поймёшь в чём дело пока не пересмотришь большую часть кода приложения глазами а писать самому под конкретный тип бывает нетривиальной задачей в случае некоторых алгоритмов я понимаю что для CRUD это не нужно, но невозможность писать такие вещи просто и приятно как раз и ограничивает Go в CRUD
Мерль
пока они не нужны вообще — то конечно не нужны и в генерализованном типе вы их не видите, потому что на Go их никто не пишет почти, кроме некоторых фанатиков а как только нужны какие-нибудь графы направленные, где у тебя ноды могут быть ещё и разного типа, так у тебя Go превращается в мешанину кастов, тайп свитчей и пустых интерфейсов да и просто можно поглядеть на такие прекрасные конструкции как map[string]interface{} на каждом месте, где надо работать с динамическими данными, и которые взрывается потому что где-то в глубине вместо int кто-то положил json.Number и ты не поймёшь в чём дело пока не пересмотришь большую часть кода приложения глазами а писать самому под конкретный тип бывает нетривиальной задачей в случае некоторых алгоритмов я понимаю что для CRUD это не нужно, но невозможность писать такие вещи просто и приятно как раз и ограничивает Go в CRUD
я знаю эту боль, потому что мне приходится работать с этими самыми графами прямо сейчас
Мерль
и нет, обычно авторы пакетов с нужными алгоритмами никакими кодогенераторами не заморачиваются
Мерль
ну а вообще, то конечно дженерики и типы суммы не нужны, так же как и непустые интерфейсы нет ничего такого, чего нельзя было бы сделать с помощью interface{}, switch и рефлексии вопрос в том, сколько убитых нервов и часов работы будет стоить вам отладка всего этого недо-питона
Мерль
ну и кто смотрел на kubernetes с его рантайм дженериками — тот больше в цирке не смеётся, а плачет
Roman
пока они не нужны вообще — то конечно не нужны и в генерализованном типе вы их не видите, потому что на Go их никто не пишет почти, кроме некоторых фанатиков а как только нужны какие-нибудь графы направленные, где у тебя ноды могут быть ещё и разного типа, так у тебя Go превращается в мешанину кастов, тайп свитчей и пустых интерфейсов да и просто можно поглядеть на такие прекрасные конструкции как map[string]interface{} на каждом месте, где надо работать с динамическими данными, и которые взрывается потому что где-то в глубине вместо int кто-то положил json.Number и ты не поймёшь в чём дело пока не пересмотришь большую часть кода приложения глазами а писать самому под конкретный тип бывает нетривиальной задачей в случае некоторых алгоритмов я понимаю что для CRUD это не нужно, но невозможность писать такие вещи просто и приятно как раз и ограничивает Go в CRUD
а еще это мешает нормальному оптимизирующему компилятору
Alexey
https://m.youtube.com/watch?v=6wIP3rO6On8#
ну все, смена парадигмы. теперь похоже генерики нужны. та же история что с менеджером пакетов.
Daniel
но
Daniel
не будет ли лекарство горше болезни?
Daniel
я, в общем, очень ценю возможность легко понять, где же именно определено поведение того объекта, на который я сейчас гляжу
Мерль
не будет ли лекарство горше болезни?
если это будет сделано в стиле го – минимализм и единство стиля, то думаю нет в любом случае, если этого не делать, то го просто помрёт
Daniel
а если нашим уважаемым коллегам дать в руки генерики - они же понапишут такой херни, что будет у нас и вправду новый php
Daniel
а вот с этим плохо
Daniel
по большей части этот код все же генерируется
Мерль
по большей части все же нет.
ну пока это микросервис уровне круда — нет
Мерль
по большей части этот код все же генерируется
он должен генерироваться это подход здорового человека с большим количеством времени
Daniel
если глянуть на тот код, который генерирует protobuf - все недостатки go как языка сразу видны
Daniel
но радость в том, что можно и не глядеть :)
Мерль
ИМХО в го нету дженериков-на-кодогенераторах и вообще нормальной общепринятой инфраструктуры кодогенераторов потому что, давайте согласимся, при всей офигенности изкоробочных пакетов парсинга кода, писать кодогенераторы довольно сложно, громоздко и ненадёжно а какого-то эталонного тулинга для этого нет
Мерль
ну кроме Stringer )
Daniel
я знаю, как написать генерики на кодогенераторе
Daniel
я написал несколько кодогенераторов в своей жизни, как из yaml, так и из кода с тегами
Daniel
я не написал своего генерик-генератора потому, что я очень смутно представляю себе, зачем нужны генерики
Pawel
пока они не нужны вообще — то конечно не нужны и в генерализованном типе вы их не видите, потому что на Go их никто не пишет почти, кроме некоторых фанатиков а как только нужны какие-нибудь графы направленные, где у тебя ноды могут быть ещё и разного типа, так у тебя Go превращается в мешанину кастов, тайп свитчей и пустых интерфейсов да и просто можно поглядеть на такие прекрасные конструкции как map[string]interface{} на каждом месте, где надо работать с динамическими данными, и которые взрывается потому что где-то в глубине вместо int кто-то положил json.Number и ты не поймёшь в чём дело пока не пересмотришь большую часть кода приложения глазами а писать самому под конкретный тип бывает нетривиальной задачей в случае некоторых алгоритмов я понимаю что для CRUD это не нужно, но невозможность писать такие вещи просто и приятно как раз и ограничивает Go в CRUD
вот как раз таки там где interface{} имеет место быть надо писать тесты, проверяющие корректность кастов. И ошибок таких быть не должно
Мерль
вот как раз таки там где interface{} имеет место быть надо писать тесты, проверяющие корректность кастов. И ошибок таких быть не должно
надо делать так, как делать надо, и не надо делать так, как не надо поэтому сильная и статическая типизация не нужна )
Pawel
надо делать так, как делать надо, и не надо делать так, как не надо поэтому сильная и статическая типизация не нужна )
я когда взял себе труд тесты писать, проблемы не правильных кастов interface{} ушли
Мерль
я когда взял себе труд тесты писать, проблемы не правильных кастов interface{} ушли
хм заменить все эти аргументы про interface{} на js или python и никакой разницы не будет вообще
Мерль
собственно ассемблер тоже прекрасный язык, если у тебя есть время на пару месяцев трассировки
Мерль
Типизация говоришь не нужна
конечно есть же тесты
Pawel
хм заменить все эти аргументы про interface{} на js или python и никакой разницы не будет вообще
ну собственно да. В js/питоне без тестов, заминяющих типизацию, никуда
Anonymous
Anonymous
Зачем нам самолеты, если есть велосипеды
Pawel
просто оно не так часто надо
Мерль
скоро мы научим писать компилятор тесты за нас, чтобы он проверял что мы пихаем в interface{}
Мерль
я даже придумал специальный синтаксис подсказок для компилятора чтобы подсказывать типы
Мерль
смотрите var ints = make(Set<int>)
Мерль
удобно!
Мерль
не то что ваши дженерики
Pawel
ну и для своего обощённого кода я научился таки писать кодогенераторы, сбасибо Александру Валялкину с его quicktemplate. Оч полезный скил
Алексей
Наконец-то более-менее нормальный проброс ошибок будет!!!!
Алексей
Это куда важнее каких-то там дженериков
Алексей
Many people have concluded (incorrectly) that the Go team’s position is “Go will never have generics.” Да и дженерики вдруг оказались не так уж ненужны.
Michael
Ссылки на статьи выше есть
Vladimir
Ну и хорошо
саша
Ну что, все уже переобулись?