LINUX.ORG.RU

Что происходит с популярностью Go?

 ,


1

3

Примерно с лета прошлого года популярность языка программирования Go неуклонно падает. По крайней мере если верить индексам TIOBE и PYPL. В начале прошлого года Go входил в первую десятку самых популярных языков программирования, но сейчас он уже во второй десятке - ближе к её нижней границе. Если TIOBE и PYPL не отражают действительность, то какие другие индексы отражают её лучше? Хотя на https://langpop.com/ Go всё ещё в первой десятке. Что вообще происходит с Go и каковы ваши прогнозы на ближайшие пару лет?

Ну и чтобы два раза не вставать, дополнительный вопрос. Один из конкурентов Go - это JavaScript/TypeScript на платформе node.js. Когда популярность Go росла, значительный процент новых программистов на Go был представлен теми, кто переходил на него с JS/TS. Однако если сейчас посмотреть на объявления о работе (живу не в России), то там какое-то засилие именно JS/TS, причём в основном это молодые компании и стартапы. Можно ли это объяснить банальной экономией на найме, когда одни и те же люди делают и бэкэнд и фронтэнд? Иначе я никак не могу понять тягу к языку, в котором нет нормальной параллельности и вообще куча костылей и легаси.

Update: большой брат подслушал и порекомендовал в ютубе: www.youtube.com/shorts/Vh97uPhmhqI



Последнее исправление: hummer (всего исправлений: 2)
Ответ на: комментарий от eao197

Обобщенное программирование – это не только контейнеры

Я понимаю. Однако, без иерархии типов необходимость дженериков уменьшается ещё сильнее.

(В качестве примера, slices.Sort на дженериках против sort.Sort без дженериков)

что предлагал пользователю первый Go, если пользователь хотел реализовать свой разреженный вектор?

any (на тот момент `interface{}`) и рефлексию, если вдруг где-нибудь надо

Конкретно *реализовать* вообще не должно быть сложно.

не нуждается ни в каких разреженных векторах

Изысканные структуры данных вообще редко нужны. Сами-то давно пользовались, скажем, префиксным деревом?

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

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от eao197

заканчивая очень странным способом перехвата паник

On purpose же. Паники для исключительных случаев, поэтому синтаксис не должен поощрять применять их без необходимости.

kaldeon ★★
()
Ответ на: комментарий от dynamic_cast

Если что то в go это не создание структуры с другим именем.

Это создание нового типа, а то что оно структура дело десястое.

anonymous
()
Ответ на: комментарий от hummer

Предметом обсуждения был вопрос, почему в яву (первую) не приехали шаблоны.

Потому что именно с Java 2 это уже не MVP.

И какое отношение этот "не MVP" имеет к вопросу, почему в MVP не приехали шаблоны?

r--r--r--
()
Последнее исправление: r--r--r-- (всего исправлений: 1)
Ответ на: комментарий от hummer

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

А так учитывая что тот же Роберт Гриземер прямо вместе с Виртом работал вполе очевидно откуда он и вытащил многие концепты - из того времени когда у него хязыки были лучше.

ya-betmen ★★★★★
()
Ответ на: комментарий от kaldeon

В качестве примера, slices.Sort на дженериках против sort.Sort без дженериков

ИМХО, slices.Sort показывает как оно должно быть. Тогда как sort.Sort без дженериков выглядит как крутой workaround, который талантливым разработчикам удалось придумать в условиях отсутствия дженериков.

any (на тот момент interface{}) и рефлексию, если вдруг где-нибудь надо

И получить огромный расход памяти и просадку про производительности в случаях, когда хранить нужно int-ы или double-ы.

Сами-то давно пользовались, скажем, префиксным деревом?

Вот это вы удачно зашли. Для текущего заказчика года полтора назад довелось сделать реализацию специфического дерева на базе padix-tree. С тех пор раз в 3-4 месяца в это дерево добавляются какие-то новые фичи. Одну из них нужно добавить вот прямо сейчас.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Общаясь с вами все лучше становится понятно для какой аудитории делали Go. И понятно почему Go пользуется такой популярностью.

Общаясь с вами все лучше становится понятно почему о вас такого невысокого мнения даже анонимусы.

И откуда и зачем вы его взяли? А, наверное вам, как Go-шнику, подойдет и неоптимальное решение. Главное, чтобы простое.

Уровень идиотии просто зашкаливает. Потому что только идиотией можно объяснить ваши выводы, например о том, что «подойдет и неоптимальное решение», в разговоре о формальном определении.

Языка C/C++ не существует.

И снова приступ острой мозговой недостаточности. C/C++ - это общепринятое обозначение сразу двух языков.

По поводу Си-ных массивов вопросы следует адресовать разработчикам Си.

Да что вы говорите? А я думал у вас хватит извилин хотябы на гипотезу. А то вон как про Go разошлись, хоть санитаров зови.

Да, а еще Пайка брали в Google чтобы он Go для Google сделал.

Скорее всего его туда брали не только для этого, но в итоге именно Пайк стал основным разработчиком Go.

Какой же вы сказочный.

Какой же вы болезный.

hummer
() автор топика
Ответ на: комментарий от eao197

Это Java 1.0 со своим JDK, в который входила даже GUI библиотека AWT, была MVP?

В вашей палате дурдома MVP с GUI - не MVP? Попробуйте ванны и больше времени проводите на свежем воздухе.

hummer
() автор топика
Ответ на: комментарий от dynamic_cast

Разве может набирать популярность язык с таким синтаксисом..

type User struct {
	Name string
}

Будте конкретнее, объясните что вам тут не нравится.

hummer
() автор топика
Ответ на: комментарий от hummer

Я ему вчера выше написал, и по скольку он молчит то значит прнял свою ошибку.

anonymous
()
Ответ на: комментарий от r--r--r--

И какое отношение этот «не MVP» имеет к вопросу, почему в MVP не приехали шаблоны?

Если вы не понимаете что такое MVP, то какой смысл отвечать на этот ваш вопрос?

hummer
() автор топика
Ответ на: комментарий от hummer

В вашей палате дурдома MVP с GUI - не MVP?

Нет. У нас тут с другими поциентами полный консенсус: MVP – это минимальный продукт. Ну т.е. покрывающий самый-самый минимум. В приложении к Java 1.0 это было бы как компилятор и совсем скудный набор базовых классов (типа вектора и хэш-таблицы). Но когда в комплект кладут базовую библиотеку такого объема, который по тем временам мало кому снился, а еще и кроссплатформенный GUI в довесок… Не, на MVP это не тянет. Это полноценный программный продукт.

eao197 ★★★★★
()
Ответ на: комментарий от ya-betmen

твоей юзкейс навыворот

Вполне реальный юзкейс. А в твоей вселенной Java классам запрещено реализовывать больше одного интерфейса?

А так учитывая что тот же Роберт Гриземер…

Не знаю что там делал Роберт Гриземер, но ты несёшь какой-то бред.

hummer
() автор топика
Ответ на: комментарий от eao197

Я помню первый ДУБ, Гослинг если я его не путаю разрабатывал жаву как расширение браузера.

anonymous
()
Ответ на: комментарий от eao197

покрывающий самый-самый минимум

А кто этот минимум определяет? Вот у нас, например, MVP это прямо полноценное приложение, с GUI и всякими штуками. Просто потому, что без GUI и всяких интеграций с BI, например, приложение нахрен не нужно, ну так бизнес считает.

Не, на MVP это не тянет.

У нас как-то полноценная ЭТП как MVP улетела. С интеграцией с госухой, с физическими токенами для авторизации, там больше десятка серверов и куча микросервисов. И это был MVP, обрабатывающий 1000+rps в один инстанс, терабайты данных, миллионы позиций. Поэтому что такое «минимально работающий продукт» решать не тебе, а бизнесу.

anonymous
()
Ответ на: комментарий от hummer

Потому что только идиотией можно объяснить ваши выводы, например о том, что «подойдет и неоптимальное решение», в разговоре о формальном определении.

А кого здесь интересует формальное определение? Разве что вас.

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

Если вы хотите пофлеймить на тему определения «разреженного вектора» с точки зрения математики – то флаг вам в руки.

C/C++ - это общепринятое обозначение сразу двух языков.

Люди, которые плотно занимаются либо Си, либо C++, уже давным давно не смешивают их. Это разные языки, с разными возможностями и разными подходами к программированию на них. С той лишь поправкой, что C++ поддерживает некоторое подмножество Си внутри себя.

А уж в разговоре про типы массивов употреблять C/C++ еще более нелепо, потому что есть массивы в Си, а есть совсем другие массивы в C++. И если у вас есть претензии к массивам Си, то нехрен притягивать сюда C++, в котором к std::array ничего из описанного вами не применимо.

А я думал у вас хватит извилин хотябы на гипотезу.

Еще одно доказательство того, что «думать» – это не ваше.

А то вон как про Go разошлись, хоть санитаров зови.

Ну позовите. Или в спортлотто напишите. Go выпустили в свет в 2009-ом году, когда все мейнстримовые языки уже прошли путь от «без дженериков ибо нахер не нужно» до обязательной поддержки обобщенного программирования.

И тут остается только гадать, что мешало авторам Go учесть этот опыт.

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

И еще хрен знает насколько бы успешнее был старт Go, если бы он вышел на пару лет позже, но с дженериками. Чтобы в нем slices.Sort был сразу вместо sort.Sort.

Скорее всего его туда брали не только для этого,

С вероятностью 99.9(9)% его туда брали вообще не для этого. А если вы все еще верите в теории заговоров, то это лишь подтверждает, что думать – это не ваше.

но в итоге именно Пайк стал основным разработчиком Go.

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

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

Поэтому что такое «минимально работающий продукт» решать не тебе, а бизнесу.

Ну так Sun, как бизнес, и решил.

И вбухал десятки миллионов долларов в разработку и маркетинг Java. Там одна реклама Java 1.0 была настолько агрессивной, что никаким MVP никогда и не снилось.

PS. И, кстати говоря, почему вы написали про «решать не тебе, а бизнесу» именно мне, а не hummer-у? Это же он классифицировал Java 1.0 как MVP. Т.е. hummer-у можно, а другим нет? Или hummer и был тогда лицом, принимающим решения, в Sun?

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от eao197

С той лишь поправкой, что C++ поддерживает некоторое подмножество Си внутри себя.

То есть C/C++ )))

есть массивы в Си, а есть совсем другие массивы в C++

А как же «C++ поддерживает некоторое подмножество Си»?

Остальной бред про «божественнойсть дженериков» я уже не хочу комментировать - это только портить )

anonymous
()
Ответ на: комментарий от eao197

Там одна реклама Java 1.0 была настолько агрессивной, что никаким MVP никогда и не снилось.

Отдельной масштабной рекламной кампании именно для Java 1.0 не было. Никогда. Врунишка.

anonymous
()
Ответ на: комментарий от eao197

Подумайте. Обычно анонимусам это не свойственно. Но вдруг.

Подумал и задал вполне себе резонный вопрос. Но комментатор решил съехать с темы.

anonymous
()
Ответ на: комментарий от anonymous

Но комментатор решил съехать с темы.

Зарегистрируйтесь, тогда можно будет поговорить.

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

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Зачем? Что-то не устраивает - жалуйтесь в спортлото. Я отсюда 5 лет назад выпиливался не для того, чтобы регистрироваться. Прихожу когда хочу, комментирую что хочу. Не нравится - не общайтесь, делов то. Хотя чтобы не отличить разных анонимусов это чаще всего надо постараться, да.

anonymous
()
Ответ на: комментарий от anonymous

Зачем?

Чтобы получить ответы на ваши вопросы. Если вам они нужны.

Не нравится - не общайтесь, делов то.

Именно так и сделаю.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Я предлагал метить анонимусов в пределах треда по ип, типа две последнии цифры прибавлять к слову аннонимус.

Сам когда был регистрантом путался, кому отвечать.

Но это видать сложно, или не нужно … х.з.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Осспади, да по куке нумеровать. Если накодить. Осталось кому-нить накодить и сделать пуллреквест. Это же в опенсурсе.

anonymous
()
Ответ на: комментарий от eao197

У нас тут с другими поциентами полный консенсус

Медсёстры хоть красивые?

hummer
() автор топика
Ответ на: комментарий от pikabu

Go это язык для идиотов же официально? А их нейросети заменили и он стал не нужен

Как я рад, что тебя среди моих коллег нет, в виду замены нейросетями.

hummer
() автор топика
Ответ на: комментарий от ya-betmen

Кажется обсуждать с тобой типизацию в разных языках бесперспективное дело.

Простите что вмешиваюсь, но мне кажется, что ваш разговор мог сложиться иначе, если бы были примеры кода. Вот привел бы hummer пример на Go и рядом этот же пример на Java, типа вот здесь хорошо, потому что в Go интерфейсы и структурная типизация, а в Java фигня, потому что там номинативная типизация (надеюсь с терминами не ошибся).

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

eao197 ★★★★★
()
Ответ на: комментарий от eao197

А кого здесь интересует формальное определение? Разве что вас.

Разговор был об определении. Не забывайте принимать таблетки.

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

Мне тоже много чего нужно, но я же не вставляют свои хотелки где попало невпопад.

Если вы хотите пофлеймить на тему определения «разреженного вектора» с точки зрения математики – то флаг вам в руки.

Пофлеймить, судя по всему, хотите именно вы. Ну или это осбенность вашего воспалённого мозга, чему я конечно же сочуствую.

Люди, которые плотно занимаются либо Си, либо C++, уже давным давно не смешивают их.

Да что вы говорите! Давайте устроем охоту с собаками на тех, кто смешивает. И я таки советую вашему лечащему врачу увеличить дозировку, потому что C/C++ - это вовсе не смешивание этих двух языков.

А уж в разговоре про типы массивов употреблять C/C++ еще более нелепо, потому что есть массивы в Си, а есть совсем другие массивы в C++. И если у вас есть претензии к массивам Си, то нехрен притягивать сюда C++, в котором к std::array ничего из описанного вами не применимо.

Так таки и ничего? Неужели 5[a] в C++ работать не будет? В C++ std::array не заменяет C-массивы на уровне языка, а является контейнером стандартной библиотеки, существующим наряду с ними.

Еще одно доказательство того, что «думать» – это не ваше.

У вас типичное заблуждение отсталых - судить по себе.

Go выпустили в свет в 2009-ом году, когда все мейнстримовые языки уже прошли путь от «без дженериков ибо нахер не нужно» до обязательной поддержки обобщенного программирования.

И тут остается только гадать, что мешало авторам Go учесть этот опыт.

Зачем гадать? Я вам уже несколько раз объяснил почему их там сразу не было. У вас амнезия или вас снова избили санитары?

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

С кем кроме себя вы тут спорите? Или я где-то говорил, что дженерики - это плохо и лучше без них?

И еще хрен знает насколько бы успешнее был старт Go, если бы он вышел на пару лет позже, но с дженериками. Чтобы в нем slices.Sort был сразу вместо sort.Sort.

Вы ещё на C++ пожалуйтесь, что он сразу хотя бы уровня C++11 не появился. Заодно можете пожаловаться на то, что сразу нормальные среды разработки к нему не придумали и долгое время пихали богомерзскую венгерскую нотация в качестве костыля и травмы головного мозга почти всех старых сишников. Или пожалуйтесь на Java 1.x (которая по вашему не MVP), в которой нормальных коллекций Java 2 ещё не было.

Ну а уж утверждение, что slices.Sort является полной заменой sort.Sort - это от незнания Go, непонимания простого факта, что сортировать бывает нужно вовсе не только слайсы, а так же непонимания что слайсы в Go не реализуют интерфейс sort.Interface и соответственно сортироваться при помощи sort.Sort вообще не могут. До появление slices.Sort в Go 1.21 слайсы сортировали при помощи функций типа sort.Ints, sort.Strings и так далее.

С вероятностью 99.9(9)% его туда брали вообще не для этого. А если вы все еще верите в теории заговоров, то это лишь подтверждает, что думать – это не ваше.

Вы даже математику не знаете, ведь 99.9(9) = 100. А теории заговора вы умеете строить не хуже моего. Достаточно перечитать весь ваш бред о мотивации создания Go. Что касается Пайка, язык Go он начал делать вовсе не тогда, когда уже появилась его первая версия. Но вашим восполённым мозгом этого не понять.

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

Не знаю что у вас в заднице происходит, но Пайк стоял у истоков Go ещё с 1988 года, создав язык Newsqueak. Кстати, если верить Википедии, этот язык оказал влияние не только на Go, но и на Rust.

hummer
() автор топика
Последнее исправление: hummer (всего исправлений: 1)
Ответ на: комментарий от eao197

И вбухал десятки миллионов долларов в разработку и маркетинг Java. Там одна реклама Java 1.0 была настолько агрессивной, что никаким MVP никогда и не снилось.

В отличии от PoC, MVP как раз для того и создаются, чтобы заработать много бабла и продолжить совершенствование продукта.

hummer
() автор топика
Ответ на: комментарий от r--r--r--

Объяснить цель написания постов, пересказывающих историю явы, в этом топике.

Цель - объяснить почему в Java 1.x всё было на столько плохо.

hummer
() автор топика
Ответ на: комментарий от eao197

Простите что вмешиваюсь, но мне кажется, что ваш разговор мог сложиться иначе, если бы были примеры кода. Вот привел бы hummer пример на Go и рядом этот же пример на Java, типа вот здесь хорошо, потому что в Go интерфейсы и структурная типизация, а в Java фигня, потому что там номинативная типизация (надеюсь с терминами не ошибся).

Был синтетический пример с LinkedList, но тебе как раз ставили клизму и поэтому ты этот пример упустил.

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

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

hummer
() автор топика
Ответ на: комментарий от r--r--r--

И как детали истории ява 2+ объясняют, почему в яву 1 не взяли шаблоны?

Показывает, что процесс создания этого языка был постепенным и подтверждает заявление самих разработчиков шаблонов о том, что для нормальной реализации без type erasure у них не хватило времени. Нужно ещё раз разжевать?

hummer
() автор топика
Ответ на: комментарий от ugoday

Идея писать функции, которые не трогают глобальное состояние и результат которых зависит только от входных параметров — в целом хорошая независимо от языка. Идея знать как программа будет выполняться на процессоре и не делать кульбитов, за которые этот процессор спасибо не скажет — тоже сама по себе хорошая. Если язык активно мешает реализовывать любую из этих и многих других самих по себе хороших идей — это минус этого языка, а не «свой стиль».

А поскреби любой неигрушечный проект, хоть опенсорс, хоть закрытый, то в нём действительно часто есть какой-то сложившийся стиль. Но это стиль проекта, а не языка, и с каждым проектом всё равно в него вникать, конкретный язык оказывается уже не сильно важен.

PolarFox ★★★★★
()
Ответ на: комментарий от ya-betmen

Ладно, согласен, ты меня подебил.

Мне понравилась твоя опечатка в последнем слове. Так и запишем, ya-betmen - подебил.

hummer
() автор топика
Ответ на: комментарий от hummer

Разговор был об определении.

Меня удивляет тупость людей, которые упускают из вида, что в форумных срачах все ходы записаны.

Был вопрос «что предлагал пользователю первый Go, если пользователь хотел реализовать свой разреженный вектор?»

На что вы спросили «Вы говорите про массив, большинство элементов которого равны ноль-значениям?»

А я вам ответил, что нет, речь идет о векторе, в котором отсутствующих значений нет. Физически.

Т.е. я вам сразу сказал что мне нужно. Тут не было никакого спора об определениях.

но я же не вставляют свои хотелки где попало невпопад.

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

C/C++ - это вовсе не смешивание этих двух языков.

Это хз что.

Так таки и ничего?

Таки да.

Неужели 5[a] в C++ работать не будет?

Будет, потому что это часть подмножества Си, поддерживаемая в C++. Но от этого данная конструкция не становится C++ной. Она как была Си-шной, так и осталась.

В C++ std::array не заменяет C-массивы на уровне языка, а является контейнером стандартной библиотеки, существующим наряду с ними.

Если эта конструкция позволяет мне заменить int a[10] на std::array<int, 10> a и избавиться от кучи унаследованных из Си проблем, то вполне себе заменяет.

Я вам уже несколько раз объяснил почему их там сразу не было.

Вы еще говорили, что Пайка взяли в Google чтобы он делал Go. А еще спутали проблемы с Rust-ом Cloudflare с проблемами CrowdStrike. Т.е. у вас каша в голове и путаница в показаниях.

До появление slices.Sort в Go 1.21 слайсы сортировали при помощи функций типа sort.Ints, sort.Strings и так далее.

Ну уж извините, в сортах Go-шного говна мне разбираться незачем. А вот факт того, что Go-шники много лет жрали sort.Ints, sort.Strings и пр., да еще и говорили «не надо нам усложнять язык дженериками» очень показателен.

Достаточно перечитать весь ваш бред о мотивации создания Go

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

Что касается Пайка, язык Go он начал делать вовсе не тогда, когда уже появилась его первая версия.

В интернете пишут, что Go начали делать в 2007-ом. Первая версия доступная для широкой публики, появилась в 2009-ом (по крайней мере я об этом языке тогда узнал). Релиз Go 1.0 состоялся в 2012-ом.

Покажите мне цитату, в которой я бы утверждал что-то противоречащее этой хронологии.

Хотя у вас же с подтверждениями совсем туго. Но вдруг получится.

eao197 ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария