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.

★★

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

statement это не == оператор

оператор - это любая неделимая встроенная конструкция языка

которая может быть и выражением - тернарный оператор например, или вот в CL:

http://l1sp.org/cl/eval-when

http://l1sp.org/cl/load-time-value

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

statement это не == оператор

if (condition) then … это оператор?

для справки можно посмотреть в любимое

https://learn.microsoft.com/ru-ru/cpp/c-language/if-statement-c?view=msvc-170

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

Питон, луа, руби — какая разница. Все одинаково строкоориентированные.

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

просто я сказал - «оператор if», и на меня набросились с украины, что это мол statement!!!, и тут завязалась обширная дискуссия об корректности такого перевода, на что я ответил, такой перевод может и не вполне корректен с точки зрения филологии, но является исторически принятым в русскоязычной IT литературе.

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

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

слово «оператор» переводить особо не надо, оно в английском так и будет - operator

statement - можно переводить как «конструкция [языка]»

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

конец 80х. классика жанра. как там называются statement? https://www.excelsior.ru/files/pages/wirth-pim.pdf

Они пытались познать неизвестный и удивительный мир какой-то цивилизации. Они не знали о существовании интерпретаторов.

«5. ОПЕРАТОРЫ И ВЫРАЖЕНИЯ
Языковая конструкция, задающая некоторое действие, называется оператором. Операторы могут истолковываться (исполняться), и это истолкование (исполнение) влечет за собой последствия, заключающиеся в том, что изменяется состояние вычислительного процесса, который задается совокупным значением всех переменных программы.»

В определении Go:

Operators combine operands into expressions.
Statements control execution.

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

Одни проблемы от этих ваших стейтментов, как я погляжу.

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

Они пытались познать неизвестный и удивительный мир какой-то цивилизации. Они не знали о существовании интерпретаторов.

кто они? книгу переводили в ВЦ АН СССР. один из переводчиков - В.А.Серебряков.

смотрите вики - Серебряков, Владимир Алексеевич (математик)

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

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

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

Dr64h ★★
()

А есть ли в коммон лиспе что-то общепринятое вроде жабоинтерфейса или кложапротокола? В смысле именованная коллекция обобщённых функций, которые по замыслу автора должны быть реализованы все разом для конкретного объекта?

Что-то ничего определённого не нарылось.

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

кто они? книгу переводили в ВЦ АН СССР. один из переводчиков - В.А.Серебряков.

Потому и смешно.
Тяжелый совок, первая характеристика. Выучить английский и читать на нём для большинства будет легче чем понять что пишет Серебряков.
Его лекции неизмены с 1980-х. Он похоже не понимал что «лексема» и «терминальный символ» должны быть одним словом или одним определением, так и не понимает.
Что видно на поверхности после 5 минут поиска.

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

Вообще говоря, вы все ерундой занимаетесь со всем этим спором, даже несмотря на то, что я согласен, что в переводной русскоязычной литературе «statement» устойчиво и давно переводят как «оператор». И вроде такую традицию завели не филологи, а программисты (FIXME), поэтому должны бы что-то понимать в предметной области. Хотя тут же вспоминаются thread’ы-«потоки» и хочется взять предыдущие слова обратно 😁. Так и живем.

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

А есть ли в коммон лиспе что-то общепринятое вроде жабоинтерфейса или кложапротокола? В смысле именованная коллекция обобщённых функций, которые по замыслу автора должны быть реализованы все разом для конкретного объекта?

В Common Lisp методы не принадлежат классам.
У классов нет своих методов, только положение в иерархии типов.

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

На самом деле как только не переводят: C++ Statements (en/ru), Lua Statements (en/ru) здесь например вообще слово statements в переводе опустили.

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

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

Лексемы это входные данные для парсера(«формальные грамматики»).
Для программиста лексема просто token, элемент текста с позицией в файле. Слово, точка, скобка. Они описываются обычно regexp-ами и передаются в виде списка на вход парсеру.
Всё. Защитил докторскую колбасу.

В ссылке на PDF в самом верху, перевод 1987, предисловие:

«Можно смело рассчитывать на то, что в ближайшее время, кроме зарубежных, мы будем располагать целым рядом высококачественных отечественных трансляторов, в большей степени приспособленных к нашей специфике работы на ЭВМ»

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

А есть ли в коммон лиспе что-то общепринятое вроде жабоинтерфейса или кложапротокола? В смысле именованная коллекция обобщённых функций

В Common Lisp методы не принадлежат классам.

Разве я где-то упоминал классы или методы? А не бот ли ты, часом? %)

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

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

«однопроходные» компиляторы просто вызывают функцию getLex() которая берет текущую лексему из входного текстового потока, и сразу анализируют ее.

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

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

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

В CL обобщенные функции это и есть «интерфейсы»

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

Разве я где-то упоминал классы или методы?

Нет, это я упоминал классы и методы.

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

Если вы тот самый менеджер из гугля, который спит и видит как бы ему собрать под собой толпу из 30 кодеров, чтобы вознестись над соперниками, под которыми только 15 кодеров, то не стесняйтесь, а так и скажите. Я тут чуть иронизирую, конечно, но в целом ответ тот же, обозначьте своё место в системе и можно будет понять какие у вас цели, приоритеты и подобрать под них инструмент.

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

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

ПростонародьИ..
Да, лексема простая составная часть текста кода.

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

Весь код программы Lisp находится …

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

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

Интерактивная разработка и то что Машина знает о себе всё - основное свойство.
Динамическая типизация не имеет полного смысла без процесса интеракции с исполняемым образом программы.
Программист/инженер в Lisp не пишет формулу которая проверяется компилятором, а систему, симуляцию.

Другая ветка computer science пол века пытается решить проблему полиморфизма в языках как (Oca)ML, позже Haskell. Программирование представлено как написание формулы которая передаётся на исполнение.
Динамическая система этой проблеме не подвержена своим принципом.

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

обозначьте своё место в системе

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

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

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

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

А как можно ответить на вопрос без контекста? Может вам лисп нужен, может жава, а может и паурпойнт.

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

Интерактивная разработка и то что Машина знает о себе всё - основное свойство.

Это в кложуре есть. А что внутри немного иначе реализовано, наплевать.

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

А как можно ответить на вопрос без контекста?

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

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

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

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

Толсто что даже тонко

интернетов небуло всё при лучине строганой

переводной(начало и конец 70ых) двухтомник Ульмана Аха с тео-рИя синтаксическага анализа растолмачивания и моральсейбасневания к очевидно имело иные тиражи и доступность чем hex-код листинга журнала Радио

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

моральсейбасневания

«Мораль сией басни».

сией - цієї - этой
сиею - цією - этою
сей - цей - этот
сия - ця - эта
сего - цего - этого
сих - цiх - этих
сим - цiм - этим
сими - цiми - этими
сему - цему - этому

«и» это ы.

имело иные тиражи и доступность чем hex-код листинга журнала Радио

Это говорило о реальной ситуации когда нет даже простых мнемоник ассемблера в конце 1980х. А в МФТИ, Махачкалинский Физкультурно-Технический, использовали слово транслятор но не догадывались почему именно когда-то где-то было переведено транслятор а не уже компилятор.

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

Это говорило о реальной ситуации когда нет даже простых мнемоник ассемблера.

то, что вы тут вещаете описано тут.

https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE-86%D0%A0%D0%9A

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

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

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

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

такое впечатление, что до обретения независмости украинской ССР, «на москве» даже трава не росла. и никто ни о чем не догадывался.

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

а есть ли лисп в форт синтаксисе? скобки конечно не важны

Lisp реализует lambda calculus(«лямбда исчисление»). Alonzo Church, 1930-e, США.
Форт простая стековая машина без концепта функции.

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

Lisp: (+ 1 2)

Forth: 1 2 +

Кажется, всё в порядке, две одинаковые формы записи. Но потом лисп может и так (+ 1 2 3). А как такое без скобочек изобразить?

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

кiт это кот. припiзднутся - припоздниться.

«Спізнитися». «С» обозначает совершенную форму.

Где-то за пределами цивилизации записали «при».
Они смогли представить только физическое место к которому не успели. Ничего абстрактного.

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

Если им тогда предложить простой ассемблер как более высокоуровневый инструмент они назвали бы гением и предложили бы возглавить их. Подключение к ТВ по видеосигналу без модуляции они могли сделать сами.

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

хм хм

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

а для вар-арности очевидно нужно пропихивать в стек аргументов

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

либо расплаживать для каждой арности своё имя (очевидно - некоторой интерпретацией имён - иначе много ручного буккипинга)

либо предварять(после реальных аргов и до действия) операцию аргументом а сколько ещё аргументов - что менее крассиво

ваще форт можно и в скобки обрядить - там самое главное разделение стека аргументов и стека возрвратов с прямыми манипуляциями обоими - что позволяет лапшить страшнее жалкого goto

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

Бенедикт Андерсон Воображённые сообщества

Бенедикт Річард О’Горман Андерсон (нар. 26 серпня 1936 — 13 грудня 2015) — американський політолог, історик і синолог, професор міжнародних відносин, уряду та вивчення Азії Корнуельського університету, автор монографії «Уявлені спільноти»

Уявлені спільноти – ой на(по) украински ни - вот жребий

имей публика о «Уявлені спільноти» боллее лучшее одеваться в 14 может быть и пронесло бы только

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

«Спізнитися». «С» обозначает совершенную форму.

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

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

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

хэкскодом больше килобайт помещалось - тем более у тех компов был монитор вшит с возможностью ввода heх - т.е инженерно это(печать листингов байтов как пар hex) - было годно

а вы не грустите

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

Если им тогда предложить простой ассемблер как более высокоуровневый инструмент они назвали бы гением и предложили бы возглавить их.

вы читать ссылку хоть умеете?

Базовое инструментальное программное обеспечение, опубликованное в 1986—1987 году в журнале «Радио» в виде шестнадцатеричных дампов, включало в себя:

    Бейсик-интерпретатор
    Текстовый редактор
    Ассемблер
    Дизассемблер
alysnix ★★★
()
Ответ на: комментарий от alysnix

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

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