LINUX.ORG.RU

Чем плох Go?

 , ,


4

14

Отчего многие его так не любят, что с ним не так? Ну кроме того, что:

  1. Нет дженериков, укуренные решения вроде sync.Map interface{} в stdlib как следствие;
  2. Базилион способов объявить переменную;
  3. Магические функции new() и make(), которые работают только с некоторыми типами;
  4. Выбивающиеся из общего стиля ЯП iota вместо enum, <- и ->;
  5. Сильно ограниченные константы, пригодные только для базовых типов данных;
  6. Кастрированные кортежи;
  7. Бесполезность поддержки unicode в коде ввиду того, что экспортированы могут быть только элементы, начинающиеся на символ из ограниченного подмножества;
  8. Unicode code point'ы можно складывать как числа;
  9. Впиндюренные в сам ЯП, а не в библиотеку «горутины»;
  10. Невозможность форка проекта с сабпакетами (он не скомпилируется с помощью go get/go install, официальная рекоммендация - использовать sed);
  11. Сообщество, которое в каждом объективном дефекте видит глубокий смысл и большой плюс;
  12. Go 2, который не пофиксит ничего из этого, кроме дженериков.

Вроде, не критично всё это, жить можно же?



Последнее исправление: cetjs2 (всего исправлений: 1)

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

Берёшь любой бинарь, травишь на него ldd, считаешь суммарный вес всех .so от которых зависит бинарь - это и есть искомый вес бинаря

На самом деле нет.

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

Берёшь любой бинарь, травишь на него ldd, считаешь суммарный вес всех .so от которых зависит бинарь - это и есть искомый вес бинаря

На самом деле нет.

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

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

Какая аргументация. Ты прям меня победил. Не зря звёзды дали - настоящий профессионал.

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

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

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

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

Если программа дёргает пару функций, то всё остальное ей зачем?

Если программа дергает пару функций, нафига нужна такая программа?

Вряд ли в хорошо спроектированной библиотеке все функции завязаны друг на друга.

Это определение хорошо спроектированной библиотеки.

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

Если программа дергает пару функций, нафига нужна такая программа?

Ну вот если брать gui-тулкиты, то там бо́льшая часть просто может быть не нужна.

Это определение хорошо спроектированной библиотеки.

Что всё завязано друг на друга? Мне казалось, есть top-level функции и low-level функции. Одна top-level функция завязана на множество low-level функций, но не на большое число других top-level.

(Тут top-level и low-level не имеют отношения к железу. Скорее порядка примитивов отрисовки и виджетов.)

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

Ну вот если брать gui-тулкиты, то там бо́льшая часть просто может быть не нужна.

GUI-тулкит - это коллекция библиотек. Которые в самом деле могут быть не вс е нужны конкретной программе.

Что всё завязано друг на друга?

Нет, но большая часть. Завязанность функций друг на друга - это критерий разделения их на библиотеки.

Мне казалось, есть top-level функции и low-level функции. Одна top-level функция завязана на множество low-level функций, но не на большое число других top-level.

Есть top-level функции, да (точки входа в библиотеку). Обычно они - относительно тривиальные обертки над функциями, делающими реальную работу.

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

так он что все сишные библиототеки статически линкует что ли?

Про сишные не знаю. По идее, стандартные либы его на нём же и написаны.

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

да я тоже так же думал

а коментарий написал немного не по теме не разобравшись что там к чему

вот интересно, а если с дебаг символами скомпилировано то там тогда не 2 мб а 10 будет? Просто помню лет 15 назад хелоуворлд на дельфи весил пол мегабайта(с дебаг инфой) при объему озу порядка 32 мегабайт.

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

helloword (буквально) весит 1.8 мб, после strip - 1.2, маленькие программы (до 1000 строк) весят 2-8 мб и стрипаются на 40-60 %.

anonymous
()

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

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

Представь себе:

Changes in 0.99 (25 Feb 2000)
* FULL SOURCE CODE RELEASED UNDER THE TERMS OF THE GNU GPL

Changes in 0.70 (30 Mar 1999)
* added support for linux/386 executables

$ dnf search upx
Last metadata expiration check: 0:06:09 ago on Fri 08 Dec 2017 08:58:31 +04.
================================================ Name Exactly Matched: upx =================================================
upx.x86_64 : Ultimate Packer for eXecutables
deadNightTiger ★★★★★
()
Последнее исправление: deadNightTiger (всего исправлений: 1)
Ответ на: комментарий от tailgunner

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

Как повезёт. Бывает как ты сказал, а бывает и qt ради пары функций дёргают. В любом случае методика «берём все бинарники в системе и считаем, что каждый из них размером с кде целиком» слишком упорота, чтобы обсуждать её всерьёз.

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

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

Как повезёт. Бывает как ты сказал, а бывает и qt ради пары функций дёргают

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

В любом случае методика «берём все бинарники в системе и считаем, что каждый из них размером с кде целиком» слишком упорота, чтобы обсуждать её всерьёз.

Просто тебе невыгодно воспринимать ее всерьез. Воспримешь - проиграешь спор. И что реально упорото - обсуждать случай «дергают пару функций» как типичный или показательный.

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

То, что я сказал, никак не противоречит «дерганию двух функций».

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

Просто тебе невыгодно воспринимать ее всерьез.

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

ugoday ★★★★★
()

In experiments, the execution time of a static executable was about 4000% faster than its dynamically linked counterpart when no dependent libraries (except glibc) were pre-loaded, and 100% faster when the dependent libraries were pre-loaded.

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

получается для контейнера удобно

Сам не щупал, только погуглил сейчас. Вот тут Hello world получается в контейнере на 1.6Мб размером :)

https://tachingchen.com/blog/Building-Minimal-Docker-Image-for-Go-Applications/

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

Вот ещё аналог, тут пример с печатью контента google.com — 5.6Мб на минимальный контейнер:

https://blog.codeship.com/building-minimal-docker-containers-for-go-applicati...

KRoN73 ★★★★★
()

Stop

Хватит жрать говно, используй ADA!

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

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

strace gedit 2>&1 |grep open| wc -l      
1455

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

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

чушь какая

контейнеру по барабану сколько у него файлов внутри слоя, один или 28, слой он и есть слой.

можно один минимальный контейнер юзать для разных бинарников

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

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

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

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

Сколько функций из библиотеки дёргает хеллворд? 1-2? Сколько нужно кода для организации printf'а? Правильно - от силы десяток килобайт. Сколько весит хелворд на этой параше? Дохренуа мегабайт.

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

Идём далее, табуретка совсем поехала, в край упоровшись. Теперь она все сообщает, что кто-то считал «все бинарники в системе» - нет, табуретка, считали зависимости бинарника.

Но как всегда, очередное трепло обделалось и начинает врать, юлить и нести ахинею. Ничего нового.

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

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

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

Сам себя не похвалишь - никто не похвалит...

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

Сколько функций из библиотеки дёргает хеллворд? 1-2? Сколько нужно кода для организации printf'а? Правильно - от силы десяток килобайт. Сколько весит хелворд на этой параше? Дохренуа мегабайт.

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

Есть примеры, на которых это можно проверить?

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

Ну так может это gc весит столько, тогда не обязательно (вес большой программы - вес gc)

Гц на мегабайты бинарей? Такая себе история.

Есть примеры, на которых это можно проверить?

Понятия не имею, в этой поделки, насколько я понял, даже ГЦ хрен отрубишь - всё отрубится.

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

Прикрутить lto ещё сложнее, нежели вообще выкинуть линковку. На самом деле, даже в расто-параше додумались( хотя скорее дело не в этом) собирать «модули», а не файлы. Собирать файлы - это 70года.

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

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

anonymous
()

Go можно ругать. Ничего нет, дурацкие решения, культ и т.д. Но я, как скриптоинвалид, не осиливший C/C++, признаюсь, что такого языка не хватало. Не полагаться же на питоноруби интерпретаторы. Синтаксис дубовый. Есть какой-никакой, но компилятор, дающий по рукам. Бинарник собрал и красота. Для тех кто раньше писал скриптики реально шаг вперёд.

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

— Все говорят: «Фильм для дураков, фильм для дураков!» А я сходил, и мне понравилось.

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

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

Ничего не будет развиваться, если существует культ. У крестов есть «ошибка в ДНК», но сектанты никогда этого не примут. Сишка протухла и сектанты никогда этого не примут. Что ты будешь делать? В крестах кастылят и кастылят дерьмо сверху, но фундаментальные проблемы никто не решает.

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

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

Иди и посмотри на руст и его адептов. Раньше всё орали, что «кресты медленно собираются, наш руст - гениален» и что? Что вышло? Кресты уже уделывают эту поделку. Поняли ли сектанты свою ошибку? Нет, они всегда придумают всё новые и новые оправдания.

Такой общество неспособно к развитию, как их идол. И ты бы мог получить больше и лучше, но ты не получишь - и причина проста. Жри что дают.

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

Ты бы мог получить всё тоже самое, только в нормальном виде

А вот с этого момента поподробней, пожалуйста!

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

Просто тебе невыгодно воспринимать ее всерьез.

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

Просто тебе выгодно считать глупостью то, что явлется оценкой сверху :)

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

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

Как мне кажется, смысл Go не в том, чтобы запихать в него все какие есть фичи языка и пусть в этом винегрете никто не разберётся, зато фанбои смогут тыкать сторонникам других языков «в моём языке есть $feature, а в твоём жалком языке для неудачников нету, ха-ха». Смысл Go в том, чтобы собрать хороший набор возможностей, который с одной стороны позволяет делать большие осмысленные программы, а с другой — бросить любого джуна в любой проект и начать получать выгоду от него незамедлительно. Для программирования «just for fun» это, наверное, не очень хороший подход, а вот в индустрии он очень востребован.

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

А всё очень просто. Ты получаешь то, что принимаешь. Кто вбрасывал ахинею про «ОС загнётся на 100тредах»? Кто в это верил? Кому выкатили говносинтаксис и сказали «так решил наш комнатный гений - хавай» и все схавали.

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

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

Как мне кажется, смысл Go не в том, чтобы запихать в него все какие есть фичи языка и пусть в этом винегрете никто не разберётся

Ты перепутал си/кресты и жабаскрипт. Попробуй ещё раз.

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

Ты перепутал адептов раста/хаскалятинки с С/С++. Кстати, именно го - является несоизмеримо более сектантским языком, нежели кресты/си.

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

Смысл Go в том, чтобы собрать хороший набор возможностей

Только вот никаких возможностей в го нет.

делать большие осмысленные программы

Которых в природе не существует.

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

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

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

anonymous
()

Не нравится не ешь

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

Мне кажется, что Го тихим сапом отхватывает кусок рынка питонистов, джавистов, си/с++ местами. Сужу по примерам со своей галеры (причем очень большой 5000+ гребцов). Вот и рвет пуканы у тех кто не ничего не хочет учить. Причем крупные заказчики распробовали гошечку и делают ставку не него. Приходят новые и хотят проекты на гошечке. Да, местами он неказист, Но бизнесу не нужны шашечки а нужно ехать и побыстрее. Голодным точно с ним не будешь.

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

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

Как послушаешь, так все здесь спецы, а все оставшиеся мартышки. Это напоминает вопрос «Интересно, гопник считает себя гопником. А потом приходят такие спецы с++ в линукс разработке на собес и не знают что такое strace, прям смешно становится.

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

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

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

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

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

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

А если пожать их UPX-ом?

На кой черт? Видимый размер уменьшится, зато потребление памяти вырастет, так как маппинг средствами ОС уже не работает

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

Покажите аналог растовских option и result.

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

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