Go развивается в неверном направлении

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Язык программирования Go известен своей простотой в использовании. Благодаря продуманному синтаксису, возможностям и инструментарию, Go позволяет писать легко читаемые и поддерживаемые программы произвольной сложности (см. этот список на GitHub).

Некоторые инженеры-программисты называют Go «скучным» и «устаревшим», поскольку в нем отсутствуют передовые возможности других языков программирования, такие как монады, опциональные типы, LINQ, средства проверки заимствований, абстракции с нулевыми издержками, аспектно-ориентированное программирование, наследование, перегрузка функций и процедур и т. д. Хотя эти возможности могут упростить написание кода для определенных областей, они имеют ненулевые издержки в дополнение к преимуществам. Эти возможности обычно хороши для тренировки мозга. Но нам не нужна дополнительная умственная нагрузка при работе с производственным кодом, поскольку мы и так заняты решением бизнес-задач. Основная цена всех этих возможностей – возрастание сложности результирующего кода:

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

К сожалению, некоторые из этих функций начали появляться только в последних релизах Go:
  • В Go1.18 были добавлены дженерики. Многие инженеры-программисты хотели добавить дженерики в Go, так как считали, что это значительно повысит их производительность в Go. С момента выхода Go1.18 прошло два года, но никаких признаков повышения производительности не наблюдается. Общий уровень внедрения дженериков в Go остается низким. Почему? Потому что дженерики, как правило, не нужны в прикладном коде на Go. С другой стороны, дженерики значительно усложнили сам язык Go. Попробуйте, например, разобраться во всех тонкостях вывода типов в Go после добавления дженериков. По сложности он уже очень близок к выводу типов в C++ :) Другая проблема заключается в том, что дженерикам в Go не хватает существенных возможностей, которые есть в шаблонах C++. Например, дженерики Go не поддерживают родовые методы на родовых типах. Они также не поддерживают специализацию шаблонов и параметры шаблонов, а также многие другие возможности, которые необходимы для использования всех преимуществ родового программирования. Давайте добавим эти недостающие возможности в Go! Подождите, тогда мы получим еще один чрезмерно усложненный клон C++. Тогда зачем вообще добавлять частично работающие дженерики в Go?
Источник: https://habr.com/ru/companies/piter/articles/823496/


Интересные статьи

Интересные статьи

В апреле 2023 года шведская компания Freja Offshore подала в местное Министерство климата и бизнеса заявку на строительство крупнейшей ветряной электростанции в мире с ус...
Проблематика, решаемая в заметкеВ платформе 1С для, в клиентской её части, реализована возможность работы с HTML страницами с помощью типа поля "Поле HTML документа". Обрабатывает эту функциональност...
Самое важное: Авиакомпании в РФ не представили антикризисные планы, но начали долгие ремонты самолётов. Резко уменьшилось количество поездок по России, но неравномерно: например, в централь...
В России возросло число телефонных мошенников. В 2019-м ФинЦЕРТ Центробанка заблокировал пять тысяч номеров, принадлежащих злоумышленникам. Цифра довольно скромная, но она в 39 раз больше, чем го...
Одна из самых распространенных тем запросов, с которыми приходят к детским специалистам, это речь. Самая очевидная проблема — это когда ребенок не говорит. Вот ему год, а он молчит. Вот ему уже т...