На внедрение дженериков Go ушло 12 лет.Это политический или технический вопрос?

задняя часть Go

Всем привет, я жареная рыба.

Go1.18 beta1 вышла два дня назад, а до официального релиза Go1.18 есть еще 2 месяца, то есть дженерики вот-вот будут официально запущены.

Недавно я собирал некоторые данные о дженериках и увидел кого-то в Hacker News в 2015 году.Go 1.5 max procs default«Tucao Go не поддерживает дженерики по «политической» причине…

Это все еще имеет какой-то смысл,В основном соответствует текущим противоречиям, чтобы поделиться со всеми.

Нетизены жалуются

Пользователь сети @aikah считает, что команда Go вряд ли добавит дженерики в язык, что, очевидно, является политическим вопросом, а не техническим. То же самое касается обработки ошибок.

Как и многие другие пользователи сетиThink Go не обеспечивает правильного баланса между минимализмом и функциональностью.. Те, кто выступает против дженериков, предпочитают проверку типов во время компиляции (что всегда безопасно) для утверждений типа во время выполнения (которые могут дать сбой).

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

Официальный ответ

Расс Кокс дал официальный ответ: Извините, но нет:Дженерики — это техническая проблема, а не политический вопрос.

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

Это основной пункт и пункт противоречия, который продолжается с 2009 года по настоящее время.

возникшие проблемы

Команда Go считала, что для того, чтобы включить концепцию дженериков в Go и хорошо работать с остальной системой, необходимо решить некоторые глубокие технические проблемы, а у нас не было для них решения.

По этим вопросам я написал статью в своем блоге несколько лет назад"The Generic Dilemma":

Даже если вы преодолеете проблему на этой странице, есть и другие проблемы, следующий вопрос, который у вас возникнет: «Как заставить программистов опускать аннотации типов полезным и легко интерпретируемым способом».

То есть, как выражать параметры универсального типа более гуманным и простым способом.

Пример дженериков

Например, C++ позволяет вам писатьmake_pair(1, "foo"), вместоmake_pair<int, string>(1, "foo").

Для достижения этого эффекта вывод логики, лежащей в основе комментариев, занимает страницы спецификации, что не является особенно простой для понимания моделью программирования, и компилятор не может легко интерпретировать, когда что-то идет не так.

Там должно быть больше новых вопросов после этого.

Общайтесь с экспертами

Команда Go и некоторые настоящие эксперты по дженерикам Java говорили о том, что все говорили примерно одни и те же слова: будьте очень осторожны, это не так просто, как кажется, и вы попадете в ловушку из-за всех совершенных вами ошибок.

В качестве демонстрации Java взгляните наJava Generics FAQs - Frequently Asked QuestionsБольшая часть контента:

Посмотрите, сколько времени вам понадобится, чтобы начать думать: «Это действительно лучший способ?».

В общем процессе возникает много проблем, таких как "How do I decrypt Enum<E extends Enum>":

С этой целью команда Go очень осторожно продвигает дженерики.

признать недостатки

Команда Go ясно дала понять, признав этот факт:Отсутствие дженериков имеет определенные недостатки.

вы либо используетеinterface{}Откажитесь от проверки во время компиляции или напишите генераторы кода, чтобы усложнить процесс сборки.

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

Суммировать

Сегодня я делюсь с вами различными спорами и дискуссиями о дженериках Go в зарубежных сообществах в прошлом.На самом деле, суть дженериков предельно ясна: «Команда Go не выступает против дженериков сама по себе».

Я не мог делать дженерики все время, но также из-за большого количества проблем. параметры типа. Так что это было отложено до сих пор.

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

Очевидно,泛型就是双刃剑? Что вы думаете.

Если у вас есть какие-либо вопросы, пожалуйста, оставьте отзыв и обменяйтесь мнениями в области комментариев.Лучшие отношения - это достигать друг друга, твойкакэтожареная рыбаСамая большая мотивация для творчества, спасибо за поддержку.

Статья постоянно обновляется, вы можете прочитать ее в WeChat, выполнив поиск по запросу [Brain Fried Fish], эта статьяGitHub GitHub.com/Vicious Genetics/Нет...Он был включен, вы можете посмотреть его, чтобы выучить язык GoИди Изучай Карты и Маршруты, Добро пожаловать в Star, чтобы призвать вас к обновлению.