LINUX.ORG.RU

Там опять Go ругают

 , ,


4

9

сабж

Статья вызвала бурю эмоций на HN.

Сама статья мне очень понравилась. Очень красочно описывает моё отношение к Go.

This fake “simplicity” runs deep in the Go ecosystem. Rust has the opposite problem - things look scary at first, but it’s for a good reason. The problems tackled have inherent complexity, and it takes some effort to model them appropriately.

Ну или как я люблю говорить: Go примитивный, а не простой.

PS: Работа со строками в Go напомнила недавний холивар (C рулит и педалит.). @grem’у понравится. Путь к файлу содержит недопустимые символы? Та забей!

@WitcherGeralt

★★★★★

Ответ на: комментарий от hotpil

В 99% мейнстримных языков абстракции одни и те же.

Даже в Common Lisp похожие.

Это процедурное программирование, частично функциональное, плюс ООП. В статических языках - еще generics есть(или шаблоны, которые кроме как generics лучше не использовать).

Всё.

И работают они все абсолютно идентично - это аппликативные языки с call-by-value(с небольшими флуктуациями в виде ссылок в плюсах и указателей них же, и еще в некоторых языках).

Синтаксис это мелочь и учится вообще меньше чем за неделю не приходя в сознание.

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

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

чувак… у тебя проблемы с идентификацией. то что кто-то доверяет макакам писать код - не проблема языка. задача языка - упростить написание чего-то, с помощью экспрессивности и при этом сохранением читабельности. Go с этим справляется. D - с этим справляется. И C/С++ с этим справляются, но с одним большим НО: будь ты хоть трижды крутым программистом, но по человеческому факторы, ты уснёшь и сделаешь проблему с памятью.. по-этому, люди и придумали [s]гандоны[/s]языки Go и Rust - чтобы сконцентрироваться на написании продукта, а не на борьбе с памятью.

вы, с интельэфиксом и ТСом - посто набросили на вентилятор и раздули слона. Go со своими задачами справляется просто шикарно. Ему, конечно, не хватает экспрессивности - тут я соглашусь, но и экспрессивности - тоже есть свои недостатки: если нужен дикий синтаксис (а генерики таки добавили в Go 2), то может быть у тебя не очень хорошая архитектура.

зы. а ссылок на твой код так и не видно.. потому что ты …плёт

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

Просто нужно уволить того, кто принял решение писать проект на расте. И нанять плюсовиков

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

byko3y ★★★★
()

На первой странице «зачем го» было именно это обещано.

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

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

Это могут говорить только люди, кроме Go, D и плюсов с сишкой ничего не видевшие.

Читабельность - не характеристика языка, а характеристика кода, который на нем пишется(довольно субъективная причем), и зависит только от программиста (впрочем, как показывает практика, на больших проектах на Python и Go с читабельностью всё плохо, несмотря на то что на хелловорлдах они смотрятся красиво - потому что «понаберут по объявлениям»).

Так что остается выразительность. Так вот выразительность(количество смысла в пересчете на строки кода) - у Go удивительно угребищная. Даже Си, при всей низкоуровневости, тут его уделывает, я уж не говорю про высокоуровневые языки, типа C#, или тем более лиспов с хаскелями.

Go со своими задачами справляется просто шикарно.

если нужен дикий синтаксис (а генерики таки добавили в Go 2), то может быть у тебя не очень хорошая архитектура.

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

зы. а ссылок на твой код так и не видно.. потому что ты …плёт

Все-таки первый день на ЛОРе, видимо. Если не вообще в интернете.

https://habr.com/ru/users/love5an/

https://github.com/Lovesan

И далее по ссылкам.

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

Ну началось.
- В Гугле юзают Го и Пайтон? В Гугле сидят одни идиоты! Я умнее. Тысячи, десятки тысяч проектов используют git? Ими занимается тупое, сраное быдло! Я не такой.
Заметь, я даже не говорил о том, хорош git или плох, я изначально намекал на популярность, а популярность для ПО - это в общем-то жизнь.

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

Популярность языка/платформы/etc в индустрии это в 99% случаев исключительно желание левой пятки какого-либо менеджера в крупной корпорации и ничего более. Потом начинается раскрутка и маркетинг, на которые слетаются толпы хомячков.

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

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

А ты пропустил наш разговор про Си несколько недель назад. Мы обсуждали историю создания Си, паскаля, как один победил другой, какие в то время были альтернативы. Суть в том, что мир компьютеров был совсем другой, абсолютно не похожий на современность, и Си был выбран потому, что остальное было еще хуже. Ты представляешь, насколько тогда всё было печально, если остальное было хуже, чем Си? Ты представляешь, что Хоару и Вирту пришлось долго рвать очко просто для того, чтобы добиться принятия рекурсии в стандарт Алгол 60? Тогда была диктатура кабинетных бездарностей, высиравших одно за одним никуда не годившиеся решения, и потому любая мало-мальски годная софтина сразу расхватывалась, как горячие пирожки. Это было время васика без вызова функций, где вместо них применялись переходы к номеру строки, время фортрана без рекурсий, без циклов, и с ветвлением без else, время MUMPS, программы на котором до боли напоминают brainfuck, и еще куча полнейшего угара.

Однако, ситуация изменилась уже в 80-х. Куча наследия доказывает совсем другое - это technical debt планетарного масштаба, провал имевшейся тогда модели организации экономики, у которой, однако, были поставлены сверху иные приоритеты (как минимум в то время).

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

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

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

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

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

Welcome to the real world.

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

Если ты считаешь что на CL не пишут из-за того, что в нем содержатся какие-то технические изъяны, я тебя разочарую.

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

А что там должно быть? Куча шаблонной магии, STL, и так далее?

Если уж приходится писать на крестах (например COM используется), то весь крестовый маразм, от ссылок и шаблонов до исключений, надо свести к минимуму, и писать на Си с классами.

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

Раст для коррумпированного руководства мозиллы - это способ отмазаться от вопросов о техническом превосходстве хрома и падении рыночной доли

При чем тут корумпированность? В западных корпорациях везде есть гниль, и везде есть отделы-якоря, которые реализую провальные проекты. Вчера «Google Video» потерял рынок видеохостинга, сегодня Mozilla потерял рынок браузеров — в обоих случаях имели место сразу несколько факторов, которые нельзя свести к «да это всё из-за корумпированного руководства».

Я вот, лично, склоняюсь к позиции о том, что Chromium - говно, и Firefox Quantum - говно. Но миллионы мух продолжают быть правыми, и упорно напичкивают свои девайсы горами софта для скрытого отслеживания ввода в адресную строку, местоположения, установленного софта, смс сообщений и контактов — им нормально.

byko3y ★★★★
()

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

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

Хромиум поставил чтобы смотреть онлайн фильмы, но это только потому что мне лень разбираться что именно нужно разблокировать в uBlock + NoScript чтобы они нормально смотрелись и в лисе

Youtube использует DRM, потому без анального зонда ты не сможешь смотреть на нем видео. Зонды поставляются в релизных версиях хрома и огнелиса.

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

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

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

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

А что там должно быть?

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

Куча шаблонной магии, STL, и так далее?

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

то весь крестовый маразм, от ссылок и шаблонов до исключений, надо свести к минимуму

Ну а это тогда что такое?

    std::string rn(bd.Name);
    ResourceVar* rv = NULL;
    if(rm->find(rn) != rm->end())
      rv = rm->at(rn);

У вас же rm – это std::map, а метод std::map::at бросает исключения. И это в функции, которая возвращает HRESULT.

При этом сам по себе этот фрагмент заслуживает того, чтобы надавать вам по мордасам на код-ревью. Ибо у вас уже есть валидный итератор, но вы повторно делаете поиск по map-у.

Да и объект rn нет смысла сохранять до конца функции. Достаточно было сделать что-то вида:

ResourceMap::iterator it = rm->find(std::string(bd.Name));
if(it != rm->end())
  rv = it->second;

Ну и еще вот эти вот повторяющиеся фрагментики:

  HRESULT hr;
  if(!name)
    return E_POINTER;
  
  std::string rn(name);
  ResourceMap::iterator it = _samplers.find(rn);
  if(it == _samplers.end())
    return E_INVALIDARG;
  ResourceVar *rv = it->second;

многое говорят о вас, как о программисте.

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

Нормальный код хотя бы.

Там нормальный код, в целом. Для крестов то. COM-специфичный код с минимумом крестовых извратов. Ценителям мешанины из отборных помоев из новейших стандартов, правда, видимо, не понятный.

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

Бла бла.

многое говорят о вас, как о программисте.

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

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

Если вам кажется, что COBOL мертв, то неудивительно, что вам кажется, что чистый Си жив.
https://www.i-programmer.info/news/99-professional/13484-survey-says-cobol-st...

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

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

Там нормальный код, в целом. Для крестов то.

Ну лучше-то вы точно не сможете, так что для вас – нормальный. Для нормальных программистов – вряд ли.

Ценителям мешанины из отборных помоев из новейших стандартов, правда, видимо, не понятный.

Да вы в 2011-ом не имели представления о возможностях C++98, куда вам о чем-то более современном кукарекать, обосравшийся вы наш иксперд по всему?

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

Очевидно, пропустил некоторые типичные плюсовые говна.

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

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

Для нормальных программистов – вряд ли.

Нормальные это какие? Которые устраивают сракотан в стиле напихаем все из последних стандартов?

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

Да вы в 2011-ом не имели представления о возможностях C++98, куда вам о чем-то более современном кукарекать, обосравшийся вы наш иксперд по всему?

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

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

что каждую его тонкость знать и помнить это надо задрачивать его 20 лет

Для того, чтобы после

ResourceMap::iterator it = rm->find(rn);
if(it != rm->end())

сделать всего лишь rv=it->second, а не rv=rm->at(rn) (т.е. запускать find еще раз) не нужно ничего задрачивать по 20 лет. Достаточно просто мозги иметь и документацию прочесть.

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

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

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

Причем с учетом того что в Go совершенно уродский GC, пропустивший, как и все остальное в Go, последние 50 лет развития технологий…

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

byko3y ★★★★
()

на самом деле, я очень жалею, что у меня нет возможности (времени) заняться c/c++. и да, go мне нужен именно для того, чтобы заработать здесь и сейчас.

тем не менее, я не считаю его плохим.

у go - сам Ритчи, Деннис - крёстный отец. по-этому я хорошо отношусь к нему и не редко пускаю слезу по inferno и limbo. считаю, что go - и есть самый прямой потомок c!

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

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

«У нас на фирме» - это не «почти везде». «Везде» применяют самые разные архитектурные решения, и не так уж много фирм готовы «похвастаться» тем, что используют микросервисы именно как сложную распределенную систему, как это делает google, spotify, ebay, а не как «мне просто лень выучить опции dpkg».

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

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

Что значит «с довольно скромными паузами»? Для кого скромные, а для кого невыносимые.

Дело в том что там тупой примитивнейший mark-n-sweep.

Инкрементальный? Вот это бы пригодилось и для параллельных вычислений, и для HPC. Но нет, там тупой Stop The World.

Ну хотя бы Compacting? Нет, не Compacting, привет фрагментация и промахи кеша.

Generational? Нет, еще один привет вышеупомянутому stop the world.

Там обычный Mark-N-Sweep уровня 70х, как и всё в Go.

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

если Go не может корректно распарсить юникод (sic!) то это решается багрепортом

Это просто значит, что Go не является языком программирования общего назначения, а инструментом для решения специфичных задач. Примерно как MS Excel. Всё, что выходит за рамки спроектированных рычагов и готовых решений - отправляется в разряд «нерешаемые задачи», которые пропоненты инструмента любят называть «вам это не нужно было».

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

В Гугле юзают Го и Пайтон? В Гугле сидят одни идиоты! Я умнее. Тысячи, десятки тысяч проектов используют git? Ими занимается тупое, сраное быдло! Я не такой.
Заметь, я даже не говорил о том, хорош git или плох, я изначально намекал на популярность, а популярность для ПО - это в общем-то жизнь

Не надо приписывать мне слова, которые я не писал. Я как раз примерно в курсе, как принимались решения в гугле, как лисперов садили писать код на Java, как делалось Go и почему оно не делалось раньше, как делалось Darts и провалилось, и так далее. А для управления версиями гугл в основном использует Perforce, а не кривущий Git.

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

Популярность языка/платформы/etc в индустрии это в 99% случаев исключительно желание левой пятки какого-либо менеджера в крупной корпорации и ничего более. Потом начинается раскрутка и маркетинг, на которые слетаются толпы хомячков

Разрешите не согласиться. Контрпримеры: PHP, MySQL. Я бы все-таки акцентировал внимание на раскрутке и маркетинге, как на центральных, а желание левой пятки менеджера может быть опционально.

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

Шутка юмора.
А какие проблемы у гита? Я для себя вынес пока только одну действительно раздражающую - проблемы с историей коммитов для папки или файла после git mv.

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

C++ настолько стремное дерьмо…, язык практически бесполезный в современном мире

лол чё? C++ нужно учить хотя бы просто с эстетической точки зрения, чтобы была возможность оценить другие языки, но и просто потому, что стоит читать таких гениев как Бьёрн.

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

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

C++ нужно учить хотя бы просто с эстетической точки зрения

С эстетической точки зрения это блевота.

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

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

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

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

но этого процесс много где затянулся.

вот уж действительно, слава БГ, что на rust не переписывают.. и если думать в этом наклонении, то мозилле и правда скоро кердык.. года через 3.

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

Ну хотя бы Compacting? Нет, не Compacting, привет фрагментация и промахи кеша

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

Generational? Нет, еще один привет вышеупомянутому stop the world

Go, в отличие от каких-нибудь Java и Python, не размещает локальные/временные переменные в куче, потому не имеет проблемы большого числа молодых объектов. При этом, у параллельного сборщика длительность stop-the-world не зависит от размера кучи/поколения.

byko3y ★★★★
()

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

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

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

«У нас на фирме» - это не «почти везде».

Пол года назад искал работу, почти на всех собеседованиях: "микрсервисы, кафка, блокчейн, … "

ты придешь к руководителю и скажешь «а давайте перепишем сервис на языкнейме? … тебя спросят «какие серьезные преимущества для всей системы даст нам этот переход?»

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

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

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

А какие проблемы у гита? Я для себя вынес пока только одну действительно раздражающую - проблемы с историей коммитов для папки или файла после git mv

Именно благодаря заложенному функционалу изменения истории у Git есть такая замечательная фича, как возможность убить репозиторий до невосстанавливаемого состояния. Конечно, на stackoverflow можно найти рецепты даже для самых запущенных случаев — правда, не факт, что лично я или другой простой разработчик сможет подобный репозиторий восстановить.

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

hg update [-C|-c|-m] [-d DATE] [[-r] REV]
с опциями аналогичной команды Git
git checkout [-q] [-f] [-m] [<branch>]
git checkout [-q] [-f] [-m] --detach [<branch>]
git checkout [-q] [-f] [-m] [--detach] <commit>
git checkout [-q] [-f] [-m] [[-b|-B|--orphan] <new_branch>] [<start_point>]
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <pathspec>…​
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] --pathspec-from-file=<file> [--pathspec-file-nul]
git checkout (-p|--patch) [<tree-ish>] [--] [<pathspec>…​]
Git просто вываливает тебе на голову все свои кишки, потому что разрабы (не будем лишний раз указывать имена) не смогли и не захотели придумать, как сделать операции скрытыми и автоматическими.

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

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

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

C++ нужно учить хотя бы просто с эстетической точки зрения, чтобы была возможность оценить другие языки, но и просто потому, что стоит читать таких гениев как Бьёрн

Почитай еще таких гениев, как Сергей Пахомов. Почувствуй прекрасное в великом.

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.