LINUX.ORG.RU

Почему Go это плохо, и он вам, на самом деле, не нужен.

 ,


7

15

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

Дело в том, что Go это, на самом деле, «решение» внутренних гугловских проблем. Но отнюдь не проблем горизонтального масштабирования серверного ПО, как многие почему-то думают. Он приспособлен специально для использования в гугле вот в каком контексте.

Гугл нанимает большое количество тупых студентов, только-только после вуза или ПТУ, и заставлять их писать хоть какой-то простой код. И делать минимум ошибок, при этом. Для этого Go сделан таким тупым и упрощенным. И выкинут в паблик он только для того, чтобы вероятность, что у такого студента, только пришедшего в гугл, было хоть какое-то знание Go, была выше нуля.

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

Из гугла же идет маразматическая система управления зависимостями Го, которая заточена на монорепы.

Тут возникает вопрос - а почему этому тимлиду не дать в руки кодогенератор, вместо всей этой accidental complexity, возникающей из-за огромного количества строк кода, и из-за затрат на коммуникацию?

А тут надо понимать, как внутри устроены огромные корпорации типа гугла.

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

Естественно, это все отражается на качестве продуктов, и это видно как по полному прекращению инноваций в гугле, так и по постоянно мелькающим и закрывающимся высерам этой компании - hangouts, duo, google plus, google wave, и прочее и прочее, можете еще вспомнить много чего.

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

Никакой мифической простоты в отладке и в понимании кода Go не приносит. Да и сложность программных систем растет совершенно не из-за понятности/непонятности какой-то отдельной взятой строчки кода или функции. Потому, что, во-первых, понятность это понятие субъективное, во-вторых потому, что, отдельно взятая фунцкия на 5 строк понятна любому опытному программисту, будь она написана хоть на Rust, хоть на Common Lisp.

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

В случае если вы не хотите выкидывать кучу денег просто так, и скорее предпочли бы нанять немного, но более-менее опытных программистов, Go будет только вреден, потому что все вменяемые люди от него, на самом деле, плюются. Он реально отталкивает опытных людей, которые способны понять сложные требования и написать, и поддерживать, более-менее сложные системы уровнем хотя бы нескольких сервисов плюс БД и MQ.

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

Как раз перга от первой версии отличается тем, что когнитивная нагрузка небольшая. let внутрь поставить можно, вот так:

(perga-implementation:perga
(let a 1)
(let ((b a))
  (list a b))
)

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

Оно понимает, что если имя переменной - не атом, то это не её случай. Название не имеет значения, можно тапком назвать или пирожком.

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

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

Одним выражениям достаются все скобки, а другим не хватает, стало быть.

Нет, не так. Проще: определять переменную с помощью 6 скобок - это абсурд с любой стороны. 4 скобки у функции - это уже детали абсудра, фон, на котором это абсурд виднее. История с якобы регистрами какой-то там машины, если она правдива - это предпосылки абсурда. Но абсурд налицо, любой blub programmer его видит, и только у лисперов избирательная слепота на эту тему.

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

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

Вот как пример лиспа с более адекватным синтаксисом:

(do
 (int variable1 0) ;The default value of variable1
; is 0
 (int variable2 0) ;The default value of variable2
; is 0
 (int result 0) ;The default value of the
; result is 0
 (getInt variable1 “Number 1 = ” –100 100);Request input for variable 1
; with the text Number 1 =
; values between – 100 and 100
; are allowed
 (getInt variable2 “Number 2 = ” –100 100);Request input for variable2
 (= result (+ variable1 variable2)) ;Add and store in result
 (pause “Result = ” result) ;Display result and pause
) ; end of do

Это CAL, скриптовый язык из программы Cakewalk, и, вероятно, первый из лиспов, на котором я что-либо написал. Ведь нет же здесь этого идиотизма с 6 скобками, и к тому же переменные типизированные. Т.е. совершенно необязательно жрать кактус.

Он, конечно, не совсем лисп, т.к. нет консов, но синтаксис на S выражениях, тем не менее.

Источник: https://msmcleod.co.uk/cakewalk/Cakewalk%20Application%20Language%20Programming%20Guide.pdf

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

Уж какой есть. Что-то получше смогли сделать только в 2015-ом, в виде Rust

Господь милостив и кроме наркоманских, даровал нам и нормальные велосипеды, на которых способны кататься даже люди средних акробатических дарований.

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

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

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

4 скобки у функции - это уже детали абсудра

Имейте ж совесть! 4 скобки на функцию это стандарт: две на параметры, две на тело функции

function blah(args){
…
}
ugoday ★★★★★
()
Ответ на: комментарий от den73

Он, конечно, не совсем лисп, т.к. нет консов, но синтаксис на S выражениях, тем не менее.

Зачем эти консы вообще нужны? В современных процессорах надо массивы использовать, а не связные списки. Суть лиспа (как по-мне) в том, что код и данные выглядят одинаково и работать с кодом можно, как с данными. А какая конкретно структура данных под капотом - дело десятое.

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

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

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

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

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

из этого строятся списки и s-выражения.

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

Никакого общего дела, ради которого мы здесь собрались, нет.

Я не про лор, я про тех несчастных, которые находят в продакшен-коде пергу и безуспешно пытаются понять, ЗАЧЕМ??? и ПОЧЕМУ???

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

не цепляйтесь. есть и похуже слова из пяти букв, с шаблоном п*а

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

В современных процессорах надо массивы использовать, а не связные списки.

Можно и массивы. Главное, чтобы нужные операции можно было эффективно реализовать — добавление элемента в начало, извлечение первого элемента и списка остальных элементов.

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

Те, кто что-то нашёл в продакшен-коде, обычно имеют конкретную цель. Это на ЛОРе задаются такими вопросами. А они видят - ага, очередной велосипиед синтаксического сахара. Заходят в опредление, смотрят, понимают, делают своё дело дальше. Ты не волнуйся так, количество пострадавших не так велико, чтобы стоило из-за этого переживать. Вероятность, что ты пострадаешь, практически равна нулю. Потому что до этой перги они ещё найдут aif и кучу других подобных изобретений. Если над каждым думать, зачем, да почему, бизнес-задача не решится. Поэтому это просто дано как факт.

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

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

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

Зачем эти консы вообще нужны?

Удобное для человека представление.

В современных процессорах надо массивы использовать,

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

P.S. У меня стойкое ощущение, что некоторые участники о лиспе узнали из лабы по автолиспу, проделанной в заборостроительном институте 20 лет назад, вот и несут какую-то хрень. Так вот, специально для вас, мои дорогие, автолисп и коммонлисп — это как Карл Маркс и Фридрих Энгельс, четыре совершенно разных человека.

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

Лишняя специальная форма была неизбежна

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

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

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

Можно и массивы. Главное, чтобы нужные операции можно было эффективно реализовать — добавление элемента в начало, извлечение первого элемента и списка остальных элементов.

Кому эти операции нужные? Мне не нужные. Мне нужно (мутабельное) добавление в конец, например.

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

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

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

Кому эти операции нужные? Мне не нужные. Мне нужно (мутабельное) добавление в конец, например.

Одно другому не мешает. Есть в лиспах и списки, и массивы/векторы, и всё, что душа пожелает. Но для кода лучше иметь отдельную структуру, потому что код и данные интерпретируются по-разному — как правило, элементы списка с кодом вычисляются (eval) и значение первого элемента применяется к остальным, как к аргументам (apply). С данными этого не происходит, для них просто eval.

И эта структура для кода должна позволять им эффективно манипулировать — например, специальные формы и макросы могут добавлять её элементы, переставлять местами и удалять, а также решать, делать ли им eval.

А так да, без разницы, список или не список. Хоть объекты на замыканиях из SICP пусть будут.

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

Ну давай, раскрой нам тут как Всё На Самом Деле, а то мы то тут, и я особенно - нихрена не понимаю, одни таблетки пью.

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

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

IRL так никто в лиспе так не делает, но тут человек эээ, скажем так, вообщем, особенный. Там и русский язык в идентификаторах в коде, и ЯРОС(или как он там) и прочее.

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

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

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

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

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

Да застопорился этот прогресс к полным херам уже.

Я тут даже не говорю про шизофреников-задротов которые на C++ дрочатся(видимо потому что бабы не дают а секса охота), а даже вообще.

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

Все эти голанги, расты, зиги, и прочая сракотанина, ну это же полный трешак. Ад сраный.

Да и даже вон Clojure - пусть там и есть парочка интересных концепций(которыми один хер никто не пользуется), но по сути это такой урезанный и закостыленный недо-CL для жабомашины, подмешанный упорином из хаскеля(к слову, вот в статической типизации есть кстати некоторое развитие, но оно не относится к программированию и инженерии вообще, оно относится разве что к выбиванию грантов в университетах и R&D отделах).

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

Да застопорился этот прогресс к полным херам уже.

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

Да и даже вон Clojure - пусть там и есть парочка интересных концепций(которыми один хер никто не пользуется)

Ну, здрасьте, какой вообще смысл лезть в Clojure, если не использовать STM и неизменные структуры данных? Тогда от неё только Java со странным синтаксисом останется.

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

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

А в чём он неправ? В айти мода играет гораздо большую роль при выборе средств разработки, чем объективные характеристики. Иначе такое говно, как JavaScript, никогда бы не стал популярен.

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

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

Ты бы не удивился, а меня не уволили. По-разному бывает. Что ты хочешь от костыля? Он и в Африке костыль. Тебе нравится определение переменной с 6 скобками - пользуйся, я ж не против. Я просто объяснил, почему многие другие лисп не любят. Не из-за скобок, а из-за их количества. Они как-то подсознательно, наверное, чувствуют, что скобок больше, чем должно быть, а в итоге отказываются от изучения и использования лиспа. Ненавидеть и гнать именно меня и мою пергу (или фантазировать на эту тему) неуместно. 6 скобок - это не моя проблема, это проблема лиспа, и гонениями на меня её не получится исправить. Просто ты не хочешь её, по всей видимости, признавать, и ищешь, на что бы перевести своё внимание. Вот нашёл проблемы в костыле, которым я это исправил. Конечно, они там есть, вопрос лишь в том, что хуже - перга или 6 скобок. Но пергу можно убрать, а 6 скобок-то останутся. Не на костыль надо смотреть, а на то, для чего его пришлось сделать.

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

какой вообще смысл лезть в Clojure, если не использовать STM и неизменные структуры данных?

Запустил, бывало, REPL и кааак давай иерархии классов создавать и мутабельные объекты с массивами через интероп мусолить. Ухххх, красота. По-комсомольски, стоя и в гамаке.

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

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

При чём тут мода, просто что есть под рукой, на том и лепим. Под рукой оказался жопаскрипт.

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

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

При чём тут мода, просто что есть под рукой, на том и лепим. Под рукой оказался жопаскрипт.

Да-да. Гигантские килотонны говна на JS высирают просто потому что компилятор нормального языка скачать интернета не хватило. Время на карточке закончилось, ага.

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

почему многие другие лисп не любят. Не из-за скобок, а из-за их количества.

При чём тут скобки вообще, людям нравится то, к чему они привыкли, и не нравится напрягать голову без причины. И они это дело рационализируют — то скобок много, то операторы не в том месте, то маскот страшный.

А голову поначалу поднапрячь придётся, придётся. А не хочется, потому что непонятно, зачем. А кому-то в принципе не хочется.

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

килотонны говна на JS высирают просто потому что компилятор нормального языка скачать интернета не хватило

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

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

килотонны говна на JS высирают просто потому что компилятор нормального языка скачать интернета не хватило

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

Ты видимо не застал времена Java-апплетов, ActiveX и флэша, которые яростно использовались несмотря на существование JS в каждом браузере.

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

времена Java-апплетов, ActiveX и флэша

Судя по всему, жопаскрипт сотоварищи оказался менее всратым, чем его аналоги %)

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

Java-апплеты были не так уж плохи. Да и флэш, для своих каких-то вещей. Более позднее изобретение - Silverlight, был вообще ништяк.

Все это выдавили с рынка крупные корпорации, причем специально. Несмотря на всю всратость JS и его экосистемы.

А дебилы разнообразные и рады - о типа как круто, HTML5! CSS3! Модна, молодежна! Жопаскрипт-фреймворки! …несмотря на то что это уже тогда был сраный ад.

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

Люди говорят, что им не нравятся скобки. Ты говоришь, что люди на самом деле не понимают, почему им не нравится лисп. Кому я должен верить, учитывая, что ты тоже человек?

den73 ★★★★★
()
Ограничение на отправку комментариев: