Size: a a a

2020 May 11

A

Aikidos in Go-go!
Роман Ушаков
как можно сделать универсальный тип (аля генерик):
tmp:=nil
if (1) { tmp = []ID1{}  } else
if (2) { tmp = []ID2{}  } else
if (3) { tmp = []ID3{}  }
DoWork(tmp)
???????????????????????
нужно более детальное описание кейса. может подскажем как можно реализовать без универсального типа
источник

x

x-foby in Go-go!
Daniel Podolsky
map, slice, chan - это полноценные дженерики
Если бы slice являлся бы полноценным дженериком, под него не пришлось бы писать пакет sort в том виде, в котором он сейчас существует.
Но я не готов спорить на эту тему, если честно. Если вы считаете, что это прям дженерики, то ок)
источник

DP

Daniel Podolsky in Go-go!
x-foby
Если бы slice являлся бы полноценным дженериком, под него не пришлось бы писать пакет sort в том виде, в котором он сейчас существует.
Но я не готов спорить на эту тему, если честно. Если вы считаете, что это прям дженерики, то ок)
дженерик - это параметрический тип. если у вас другое определение дженерика - озвучьте его для начала, пожалуйста
источник

D🦆

Dmitry 🦆 in Go-go!
Aikidos
что является полноценными дженериками?
Ну вот минимально что хочется: коллекции. промисы, генераторы.
В go на первом же дне изучения языка я уже уперся в sync.Map, в котором нельзя указать тип.
источник

DP

Daniel Podolsky in Go-go!
Dmitry 🦆
Ну вот минимально что хочется: коллекции. промисы, генераторы.
В go на первом же дне изучения языка я уже уперся в sync.Map, в котором нельзя указать тип.
коллега, вы путаетесь в определениях

если какой-то дженерик не реализует весь желаемый вами функционал - это не делает его менее дженериком
источник

DP

Daniel Podolsky in Go-go!
и в этом смысле штатный map - дженерик, а sync.Map - нет
источник

D🦆

Dmitry 🦆 in Go-go!
Так про то и речь: народу не дали дженерики.
Чтобы народ сам применял их, когда хочет.

Ну и исключений нет, думаю, по той же причине. Но они имхо еще сложнее дженериков для правильного применения. Обычно первые несколько лет ими нормально джуны не пользуются.
Тут, видимо, исключительно политические мотивы их отсутсвия.
источник

ГК

Геннадий Ковалёв... in Go-go!
А чего там про Го-2 и дженереки слышно?
источник

x

x-foby in Go-go!
Daniel Podolsky
дженерик - это параметрический тип. если у вас другое определение дженерика - озвучьте его для начала, пожалуйста
Дженерик — это параметрически полиморфный тип. Всё так.
Но на мой взгляд для "настоящести дженериков" этот параметрический полиморфизм должен быть явным.

Условная len принимают в качестве аргумента экземпляр T и по какой-то условно неизвестной логике возвращает длину строки, слайса, массива или мапы.

На самом деле, конечно, любому, кто видел реализацию этих структур, логика-то понятна, но эта логика не касается и не основана на системе типов.

Вот я о чём.
источник

A

Aikidos in Go-go!
Phil Kulin
Ну ладно. Завел публику и саморекламная пауза про 30+ лет. В начале октября я рассказал про то, почему язык Go такой странный. Зачем Google придумал свою странную систему работы с абстрактными данными? Что за непривычные паттерны у нового языка от Google? Что это за «чёрт из табакерки», учитывающий только странные «хотелки» Google, но игнорирующий часть мирового опыта развития языков? «Суверенный» Go-путь? Кто эти «хипстеры» из Google, разработавшие «хипстерский» язык Go для «хипстеров»? Зачем это всё знать?
https://youtu.be/ql-uncsqoAU

👉 Это очень насыщенный доклад даже для меня. На каждую секцию из этого доклада можно ещё пару отдельных докладов сделать. Было перерыто много тысяч строк кода и просмотрено несколько часов видеоматериалов. Большинство добытых материалов в доклад не вошло.

➡️ Презентация на сайте конференции: https://golangconf.ru/2019/abstracts/5753
➡️ Презентация и её код на LaTeX на GitHub: https://github.com/schors/gcr2019strangego
➡️ Рассказ о том, как я программировал презентацию на LaTeX: https://habr.com/ru/post/471352/
@dmitry_test ^ вот человек доклад делал хороший, там немного раскрывается тема, почему голанг именно такой.
там и про дженерики есть немного.
источник

A

Aikidos in Go-go!
x-foby
Дженерик — это параметрически полиморфный тип. Всё так.
Но на мой взгляд для "настоящести дженериков" этот параметрический полиморфизм должен быть явным.

Условная len принимают в качестве аргумента экземпляр T и по какой-то условно неизвестной логике возвращает длину строки, слайса, массива или мапы.

На самом деле, конечно, любому, кто видел реализацию этих структур, логика-то понятна, но эта логика не касается и не основана на системе типов.

Вот я о чём.
> этот параметрический полиморфизм должен быть явным.

В каком виде должен быть явный "параметрический полиморфизм", если взять как пример "len"?
источник

A

Aikidos in Go-go!
С явным указанием типа?
источник

D🦆

Dmitry 🦆 in Go-go!
Aikidos
@dmitry_test ^ вот человек доклад делал хороший, там немного раскрывается тема, почему голанг именно такой.
там и про дженерики есть немного.
О, спасибо, DI там на канале, меня эта тема интересовала.
источник

DP

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

len() - это не тип, и даже не метод типа. не надо в кучу все мешать…
источник

x

x-foby in Go-go!
Aikidos
> этот параметрический полиморфизм должен быть явным.

В каком виде должен быть явный "параметрический полиморфизм", если взять как пример "len"?
С текущим положением дел никак.
источник

x

x-foby in Go-go!
Daniel Podolsky
я бы хотел напомнить, что дженерик - это именно тип, параметрический.

len() - это не тип, и даже не метод типа. не надо в кучу все мешать…
Дженерики — это не типы, а средства обобщения, языковые средства.
Параметрические типы — это один из видов дженериков.
источник

DP

Daniel Podolsky in Go-go!
x-foby
Дженерики — это не типы, а средства обобщения, языковые средства.
Параметрические типы — это один из видов дженериков.
а дайте мне, пожалуйста, ссылку на ваше определение дженериков
источник

x

x-foby in Go-go!
Daniel Podolsky
а дайте мне, пожалуйста, ссылку на ваше определение дженериков
Ссылку?
Да я как-то по памяти
источник

RS

Roman Sharkov in Go-go!
Dmitry 🦆
Ну вот минимально что хочется: коллекции. промисы, генераторы.
В go на первом же дне изучения языка я уже уперся в sync.Map, в котором нельзя указать тип.
а зачем Promise в Go?
источник

x

x-foby in Go-go!
Daniel Podolsky
а дайте мне, пожалуйста, ссылку на ваше определение дженериков
Но навскидку загуглил, википедия пишет примерно о том же.
Хотя, конечно, википедия, не самый авторитетный источник, но вы же тоже вряд ли ссылку приведёте)
https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BE%D0%B1%D1%89%D1%91%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
источник