Pull to refresh

Comments 13

func MaxInt**()

Объясните, пожалуйста, бестолковому, что это за две звезды после имени функции? Go 1.19 такую конструкцию отказывается понимать

Нда, если со стороны посмотреть как-то неоднозначно вышло. Я их отводил для номера функции, типа что я сгенерировал функции MaxInt0001, MaxInt0002 и так далее. Пожалуй, лучше заменить на номер. Спасибо)

func Scale[S []~E, E int](s S, sc E) S{}

Я, возможно, опять не догоняю, но Go 1.19 на тильду в декларации типа слайса ругается, говорит что expected type, found '~' syntax.

Так то понятно, что имеются в виду все типы, производимые от int. Но это мне понятно, а компилятору почему-то нет

Спасибо большое, это опечатка, правильно будет "~[]E", а не "[]~E". Поправил.

В опросе не сказано на каком языке используются дженерики, а в C# и Java без них никуда.

Хорошее замечание. Думаю сейчас менять результаты опроса будет уже как-то нечестно по отношению к проголосовавшим джавистам.

Я думаю для не-go языка имеется ввиду использование в интерфейсе ваших собственных функций/классов (а не использование API коллекций). Да и для Go должно подразумеваться то же самое, в конечном итоге разницы не должно быть - дженерики они и в Африке дженерики))

Когда-то любил дженерики на жаве когда под андроид писал. Ждал женерики на го. Никак не могу побороть дискомфорт от этого вырвиглазного синтакса :/

Да, понимаю зачем и почему синтаксис именно такой. Да, думаю привыкну... и все же, не покидает меня чувство что в той же жаве или c# женерики очень просто и понятный концепт с очень простым синтаксисом. Тут же в "простом го" и на дженерики надо еще правила использования помнить...

Почему глядя на go женерики я не испытываю удовольствия?

На последний вопрос мне ответить сложно, это кажется скорее к терапевту)

На счёт правил. Сперва я даже не понял о чём речь, пока моя лучшая догадка такая: нельзя использовать неограниченный дженерик в функции которая требует сложения или других операций, которые нельзя выполнить на любом типе данных. Что я могу сказать по этому поводу? Во-первых, компилятор сам всё проверит и доходчиво объяснит что ему не нравится. Во-вторых, это скорее логическая ошибка, чем какое-то особое "правило" использования дженериков. Ведь если функция не может быть корректно использована, значит она некорректная, не так ли? Если я ошибся в том как понял "правила", то поясните пожалуйста.

По части синтаксиса, какие у вас есть предложения? Сейчас уже пропоузал прошёл, менять ничего не будут, обратная совеместимость же. Но мне очень интересно что именно здесь не очевидно и как можно было бы лучше. Для меня дженерики в Go оказались очень понятными, вкатился мгновенно)

Чем больше мы хотим от языка скорости и функцинальности, тем более кучерявым становится синтаксис. К версии 2.0 Go будет не отличить от Rust.

Могу представить такое только если мы заморозим Rust в текущем состоянии, а версия 2.0. выйдет где-нибудь в 2040.
Не думаю что Go станет проще, но мне верится, что за простоту его разработчики будут драться до конца)

Спасибо большое за статью. Очень познавательно.

Я уже несколько лет пишу на Go в прод, хотя знакомство с языком начал с
самых ранних версий. Я видел такое, что вам, людям, и не снилось. Атакующие корабли, пылающие над Орионом; лучи Си, пронизывающие мрак близ ворот Тангейзера, как Garbage Collector мог сделать stop the world на пару секунд, страдал от отсутствия системы зависимостей и других проблем.

Sign up to leave a comment.