Roman
даже для структуры, содержащей только базовые типы, нельзя
И вычисления на этапе компиляции тоже нет :(
Andrei
https://github.com/prometheus/procfs
Видел, но она не умеет функционал ss/netstat Пока нашел только это https://github.com/drael/GOnetstat/blob/master/gonetstat.go
Илья
так-то я бы тоже все, что меняться не должно, обозначал бы соответствующим образом
они же вообще не типизированные, и запрет на использования там ссылочных типов накладывает компилятор
Илья
тип выводится в месте использования
Daniel
типизованные константы тоже есть
Илья
хм, да, я не прав, можно типизировать :S
freezlite
есть ридер и врайтер, но чтобы запись во врайтер с буффером была по делиметру
Илья
берешь свою реализацию write, который пишет в буфер и фалшит по делиметеру
Alexey
я в курсе, что в go есть generic типы - map, например я не в курсе, зачем вам нужны генерики кроме тех, что уже есть
Немного некропостинга, но так уж получилось, что у это сообщение попалось мне на глаза. Вот пример задачи в которой я страдаю без дженериков: отложенные вычисления. У меня есть пачка сервисов для которых нужно инициализировать клиенты. Эти клиенты это интерфейс с пачкой разных методов. Я бы хотел иметь возможность написать такой интерфейс, который будет возвращать типизированный ответ. Внутри это будет реализовано в виде значения, которое может быть nil. Если оно nil, то берем лок, и инициализирем. Сейчас у меня два варианта - либо копипастить, либо возвращать interface {}. Оба печальные.
Alexey
у нас константы похуже - они бывают только базовых типов
У них вроде тоже только для примитивных типов константы по стандарту работают. Для того, чтобы массив или объект был immutable нужно его специальным образом зафризить, например так: Object.freeze({a : 1}) Константы не позвоволяют значение менять, вы не можете своей константе присвоить новый объект, а вот его значениям - легко. Дабы этого избежать юзают фризинг, причем обычный работает поверхностно, т.е не для вложенных свойств объектов, поэтому нужно пилить велосипеды аля deepFreeze.
Denis
а что будет, если попытаться поменять значение такого объекта? эксепшн в рантайме? или просто ничего?
Илья
ничего
и это очень плохо
Tigran
почему не воспользоыаться кодогенерацией?
кодогенерация — какая-то сомнительная альтернатива дженерикам
Илья
кодогенерация — какая-то сомнительная альтернатива дженерикам
дженерики - это и есть кодогенерация, только на уровне компилятора
Alexey
почему не воспользоыаться кодогенерацией?
Воспользоваться можно, но очень хочется обойтись без нее. Я хочу иметь возможность видеть в PR весь код. Могу еще добавить субъективного - нужно всегда помнить что у тебя есть два типа кода - один который ты можешь менять, а другой который нет.
Daniel
но и минусы тоже есть
Илья
ну да, и у этого много плюсов
а как же explicit => implicit
Tigran
иначе можно дойти до написания своего DSL для кодогенерации поверх Go
Alexey
почему не воспользоыаться кодогенерацией?
ну и ты просил пример где без них плохо. Вот он ^^ :)
Tigran
а зачем map и slice, почему их тоже не кодогенерацией делать
Daniel
ну и ты просил пример где без них плохо. Вот он ^^ :)
это довольно мутный пример, и, я уверен, что, еси мы начнем его разбирать, выяснится, что генерики для него не обязательны но мне неохота об этом разговаривать
Tigran
хейтинг дженериков - это какое-то новое слово в выученной беспомощности
Tigran
гугл молодец
Илья
ну кстати да, я вижу тут еще наследование, а вот генериков не вижу
Alexey
и это очень плохо
ну это же js, поэтому у многих аллергия на него ^_^
Daniel
Выбор твой. Ты просил пример, я дал.
ты дал мутную херню, с которой мне лень разбираться
Alexey
понял. расходимся.
Kirill
что тут происходит? 🤦‍♂️
Alexey
я даже заскриню
Илья
хейтинг дженериков - это какое-то новое слово в выученной беспомощности
нет никакого хейтинга, просто в го их нет, простой реализации авторам языка не снизошло, код языка в открытом доступе - you are welcome, если понимаешь, как это сделать, даже proposal годный не получился за это время.
Alexander
что тут происходит? 🤦‍♂️
не поверишь, женерико-срач. никогда такого не было
Илья
что тут происходит? 🤦‍♂️
я насколько понял, пятница, и у парней из расточатика, после недели раздумий, опять горит
Tigran
нет никакого хейтинга, просто в го их нет, простой реализации авторам языка не снизошло, код языка в открытом доступе - you are welcome, если понимаешь, как это сделать, даже proposal годный не получился за это время.
ну когда я говорю «а мне для вот такой задачи хотелось бы, чтобы были», а мне отвечают «дженерики не нужны», выглядит как хейтинг
Tigran
добавить фичу в язык, пусть и опенсорсный - это какой-то очень высокий порог входа)
Tigran
я, конечно, их хочу, но не настолько, чтобы нанимать штат core-разработчиков
Kirill
мне даже интересно посмотреть на такой пример
Alexey
поищи мой
Алексей
при чём тут раст и его чатик? или только в расте имеются дженерики?
Tigran
падажжи, где пример? я поискал и не увдел
Ну вон же выше запостили. От себя: что, если я хочу свою «более эффективную» мапу реализовать?
Илья
поищи мой
ты свою задачу на дженериках можешь решить? рисуй псевдо или не псевдокод, я не понял чем тебе там генерики помогут
Alexander
при чём тут раст и его чатик? или только в расте имеются дженерики?
жавистам некогда ходить и хейтить другие языки, у них работа есть. ba-dum-tss!
Kirill
зафорвардите кто-то, тут многобуков уже наплодили
Алексей
жавистам некогда ходить и хейтить другие языки, у них работа есть. ba-dum-tss!
ну помимо джавы и раста дженерики есть ещё в огромной куче языков программирования
Kirill
жавистам некогда ходить и хейтить другие языки, у них работа есть. ba-dum-tss!
иногда и они приходят. видимо, в макдаке выходные бывают
Kirill
да ну, это скалисты были
их от батареи отвязывают? О_О
Илья
ну помимо джавы и раста дженерики есть ещё в огромной куче языков программирования
ну, адепты шарпа не ведут себя так активно, видимо, тоже работают
Алексей
ну, адепты шарпа не ведут себя так активно, видимо, тоже работают
а бывают и не адепты, которые прогают на нескольких языках и не привязываются фанатично только к одному
Alexey
sync.Once для кого был придуман?
как мне это поможет?
Илья
а бывают и не адепты, которые прогают на нескольких языках и не привязываются фанатично только к одному
так тут помоему все пишут на разных языках, но горит пожар только у растеров
Алексей
только растеры горят
Алексей
я вот не пишу на расте
Алексей
даже не знаю его
Алексей
но у меня горит
Алексей
причём не столько от дженериков
Alexey
sync.Once для кого был придуман?
а, это для кодогенерации, наверно!
Алексей
сколько от бесконечных if err != nil { return nil, err}
Tigran
а ещё в го есть эксепшны, но не для смердов, а только для господ
invariance
сколько от бесконечных if err != nil { return nil, err}
Зачем тогда кодить на го, раз не устраивает
Алексей
видимо уместить эту суперчатсую конструкцию в один символ - это суперсложная задача для создателей Go, посложнее дженериков
Daniel
class Lazy[T](init = () => T) { var value: T = null def get(): T = { if(value == nil) value = init return value } }
чет я не вижу тут никакой необходимости в генериках. указатель на функцию можно передать в функцию, сделать для нового Т соответствующий метод не представляется большой проблемой да, это будет копипаста. но - она будет примерно в 100500 раз понятнее, чем generic запись
Алексей
Зачем тогда кодить на го, раз не устраивает
а кто сказал, что я активно кодю на го
Kirill
понятнее стало?
так и поможет. в a.Get() делаешь a.initOnce.Do(a.init). вот тебе весь lazy.
Алексей
я собираюсь на нём кодить, когда (и если) пофиксят этот недостаток
Kirill
тьфу. не туда ответил