Программирование

Ответить в тред Ответить в тред
Тред про лучший в мире язык GO №14 /go/ Аноним 09/01/21 Суб 01:03:09 19052101
image.png 14Кб, 400x400
400x400
image.png 1857Кб, 1200x1200
1200x1200
image.png 857Кб, 700x695
700x695
Тред про лучший в мире язык GO №14 /go/

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

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

С чего начать:
- В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://golang.org/doc/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)

Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/
- Книги из списка https://github.com/dariubs/GoBooks
- А также смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw

Полезные дополнения:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/

Обновляемый список с пакетами: https://github.com/avelino/awesome-go

Небольшой канал треда: t.me/golang2ch

Предыдущий тред умирает здесь: >>1876438 (OP)
Шаблон шапки: https://pastebin.com/iRaveWbC
Аноним 09/01/21 Суб 01:08:25 19052172
Первыйнах
Аноним 09/01/21 Суб 12:30:51 19054003
>>1905217
Красава, получается
Аноним 09/01/21 Суб 15:08:20 19055094
Отлично, наконец-то без тупоебского хомяка на оп-пике.
Аноним 09/01/21 Суб 15:21:36 19055185
>>1903992 →
Эксепшнов никогда не будет скорее всего, а вот писать каждый раз 6 строк, чтобы сравнить два слайса по содержимому - это невесело.
Аноним 09/01/21 Суб 19:29:17 19057586
>>1905518
> а вот писать каждый раз 6 строк, чтобы сравнить два слайса по содержимому - это невесело.
Дженерики не только для всякой специфичной хуйни полезны. Например тот-же банальный пагинатор без дженериков не запилить без бойлерплейтов и с тайпсейфти. Да достаточно много небайтоебских полезностей привнесут. А по поводу эксепшенов - да, скорее всего не добавят, ибо слишком уж въелся в язык нынешний вид ошибок. Уже сподвижки начались в сторону нормального стекания ошибок, можно надеяться, что выдумают что-то более менее человеческое из всего этого.
Аноним 09/01/21 Суб 19:41:15 19057767
image.png 53Кб, 1122x463
1122x463
>>1905758
> пагинатор
Кстати, еще забыл упомянуть, что ебал мать Роба Пайка

я знаю, что есть костыль с созданием переменной с типом []interface{} и заполнить её по одному собаками, но блять, втф?
Аноним 09/01/21 Суб 19:42:47 19057778
Нормальную кодогенерацию собираютя завезти? Или придется еще шаблончики (например из стандартной либы "text/temlpate") юзать?
Аноним 09/01/21 Суб 19:43:06 19057799
Аноним 09/01/21 Суб 19:49:40 190579010
>>1905777
Кодогенерация, макросы, препроцессоры и транспайлеры - это в целом лютые костыли, созданные из-за скудности и примитивности синтаксисов языков. "Нормальным" это быть просто не может.
Аноним 09/01/21 Суб 19:50:26 190579111
Аноним 09/01/21 Суб 19:52:28 190579612
Аноним 09/01/21 Суб 19:56:43 190580413
>>1905790

То-то же в Расте макросы из-за того что его синтаксис примитивнее чем у императивной Жабы в которую pattern matching не завезли.
Аноним 09/01/21 Суб 19:58:48 190581514
>>1905804
Ну так в расте даже эксепшенов нет.
Аноним 09/01/21 Суб 19:59:25 190581715
Кодогенерация - это прием статического полиморфизма если что. Для Го в котором нет дженериков, это единственный способ без копипаста кода писать generic code.
Аноним 09/01/21 Суб 20:05:04 190583316
>>1905815

Плюс один special case, синтаксический костыль к декларациям функций вместо очевидного типа Result, который возвращают функции с исключениями. Я бы не назвал это плюсом.
Аноним 09/01/21 Суб 20:09:32 190583917
>>1905815

Зато есть pattern matching, where clauses, блоки-выражения.
Аноним 09/01/21 Суб 20:12:39 190584318
>>1905758
Сравнить два слайса - это не специфичная хуйня, а повседневное программирование так-то, причем вне зависимости от того, что ты программируешь.
Аноним 09/01/21 Суб 20:14:09 190584519
>>1905790
На мой взгляд синтаксические макросы - в принципе, норм, главное меру знать. Явно лучше, чем какая-нибудь Boost.Hana.
Аноним 09/01/21 Суб 20:15:36 190584820
>>1905776
Вариантность захотел, забыл на чем программируешь?)
Аноним 09/01/21 Суб 20:17:10 190585021
>>1905758
Имхо, с обработкой ошибок в Го всё нормально.
Аноним 09/01/21 Суб 20:32:37 190587822
>>1905776
> interface{}

Типобезопасненько. А главное - не нужно дополнительного бойлерплейта...
Аноним 09/01/21 Суб 20:34:27 190588123
>>1905878
Ну, можешь Animal там прописать и будет типобезопасненько. Хыч хыч улыбочку
Аноним 09/01/21 Суб 20:37:27 190589024
>>1905848

На хуйне по сравнению с которой даже php выглядит более выразительным языком.
Аноним 09/01/21 Суб 20:49:45 190591225
>>1905890
> даже php выглядит
php почти копия джавы, один из самых ООП фулл языков (лол), там даже сраные трейты есть. Не стоит сравнивать языки тупо по функционалу, иначе тогда тот же питон соснет хуйца даже у пхп (речь о функционале из коробке, а не либах). Язык это инструмент, а не тупо набор функционала.
Аноним 09/01/21 Суб 20:52:13 190591626
>>1905890
>>1905912
Нахуя вообще сравнивать go с высокоуровневыми языками? По выразительности и плюсы хуй соснут у php, блять. В байтоебском языке по определению не может быть слишком много сахара, иначе получится C++, в который понапихали столько, что выучить его нормально и жизни не хватит теперь, а на го ты через месяц уже сможешь написать 300кк рпс в наносек без утечек памяти и с многопоточностью.
Аноним 09/01/21 Суб 21:04:09 190592927
Когад го перестал быть высокоуровневым языком с сахаром
Аноним 09/01/21 Суб 21:09:28 190593628
>>1905929
А когда он им был? Та же сишка, но с батарейками и парой приколюх.
Аноним 09/01/21 Суб 21:15:56 190594229
>>1905929
> Когад го перестал быть высокоуровневым языком с сахаром
Ну кроме абстракции над многопоточностью там сахара нет особо, можешь руками память чистить с вырубленным gc, поинтеры это реальные поинтеры в память, а не просто сахар и т.д. и т.п. Естественно он не такой низкоуровневый как плюсы или раст, он скорее что-то среднее между шарпом/жавой и сями.
Аноним 09/01/21 Суб 21:18:07 190594830
>>1905942
С++ - байтоебский язык, сахара много. Что-то не сходится.
Аноним 09/01/21 Суб 21:44:38 190601631
>>1905948
Go тоже байтоебский. Весь функционал буквально на типе byte основан
Аноним 09/01/21 Суб 22:12:26 190605332
.jpg 780Кб, 2550x3506
2550x3506
Аноним 09/01/21 Суб 23:16:21 190615133
>>1905916
Да высокоуровневый го язык, вы заебали уже. Ты будешь ебаться с байтами только если сам хочешь или пишешь свою бд или там json энкодер какой-нибудь. 99% времени ты делаешь то же, что и в php и в джаве и где угодно ещё: принимаешь запрос, валидируешь аргументы, пихаешь их в функцию бизнес логики, оттуда лезешь в базу, собираешь ответ, отдаешь его обратно.

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

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

>>1906016
Лолчто, ебли с байтами нет, если ты не затачиваешь приложение под супер ультра мега хайлоад. В реальном бою ты максимум встретишь []byte, сконвертишь его в string и забудешь о том, что видел изначально.
Аноним 09/01/21 Суб 23:25:10 190615634
Пробампую здесь, а то в джава треде тихо:
>>1905425 →
>>1905709 →

В двух словах - как перекатился, что пилил на джаве, что пилишь на го?
Аноним 09/01/21 Суб 23:28:22 190615935
>>1906156
Блд, увидел ответ (>>1906157 →), хз куда смотрел до этого.
В общем, всё понятно.

Если кто-то ещё поделится подробностями переката из джавы в го - буду признателен.
Аноним 09/01/21 Суб 23:43:41 190617736
>>1906151
На плюсах ты точно также можешь этим заниматься. Уровень языка определяет не то, что на нем иногда делают. В го ты будешь ебаться с тюнингом того-же латенси как чорт, если ты не работаешь в говноконторе (а на го их меньше, чем нормального хайлоада) - ты как раз будешь заниматься конкретно что байтоебством, при чем с обязательным знанием как тот-же gc и шелдуер внутри работает.
Аноним 10/01/21 Вск 00:09:58 190620637
>>1906177
Да нихуя. Сколько уже людей приходили на конфы и говорили: нам был нужен перформанс, мы короч взяли го и просто написали нормально, ничего специально не задрачивали - и сразу попали в SLA.

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

В го есть ряд вещей, которые реально тюнятся:
- аллокатор, так в го сравнительно "дорогие" аллокации из-за того, что сборщик мусора не перемещающий, в итоге с дефрагментацией они на аллокациях борятся, решается переиспользованием объектов в узких местах через sync.Pool;
- планировщик, если у тебя прям слишком много горутин. Решается профилированием и пулами горутин;
- гц иногда захлебывается из-за слишком большого количества указателей, решается в первую очередь правильным их использованием (чтобы не держать миллионные мапы структур с указателями в памяти к примеру); И только если у тебя нужно хранить в рантайме десятки гигабайт, то нужно будет скрывать эту память гц с помощью магии.

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

Как видишь, байтоёбства я не упомянул.

Может ещё можно вспомнить уже совсем конкретные оптимизации типа использования []byte вместо string из-за иммутабельности и лишних указателей, но это совсем мелочи.


> при чем с обязательным знанием как тот-же gc и шелдуер внутри работает.
Если ты не джун - то ты и так должен этого знать.
Аноним 10/01/21 Вск 00:20:51 190622038
>>1906206
Слыш, ты умный самый, чертила? Нахуй иди. Я сказал байтоебский - значит байтоебский.

> попали в SLA
Что это значит и как относится к байтоебству, если это контракт между сервисами просто?
Аноним 10/01/21 Вск 00:25:45 190622639
>>1906220
> Что это значит и как относится к байтоебству, если это контракт между сервисами просто?
Ну грубо говоря, вы договорились, что твой сервис выдерживает 5000rps, а ты написал на php и он выдерживает только 500rps. Ты такой просто переписал его на go и даже не сильно тюнил, и он сразу вынес 10000rps, так что ты сходу выполнил договорённости, без лишнего байтоёбства.
Аноним 10/01/21 Вск 00:26:57 190622840
>>1906226
Так надо сначала узнать сколько выдержит, а потом уже обещать. Ну ты и пидрила, чисто в крысу наебщик епта.
Аноним 10/01/21 Вск 00:32:19 190623241
>>1906228
Лол, ну давай, к тебе придёт клиент и скажет "я короч хочу сайт, чтобы он там миллион пользователей одновременно мог выдержать, а то опять тормозное говно мне сделаете". Если ты ему ответишь "давай я сначала накодю, а потом померяем", то он тебя нахуй пошлёт и меня наймёт и правильно сделает. Потому что я подумаю и выдаем ему реалистичное число, которое потом мы в контракт и напишем (прямо над чеком в миллион баксов лично мне). Бизнес логику напишу на чём угодно, а узкие места на том же го сделаю и нормально будет.
Аноним 10/01/21 Вск 00:34:30 190623442
>>1905776
Что ты хотел этим продемонстрировать?
Ты типа только вчера для себя открыл го, или что?
Книжку хоть одну прочёл?

Да, нету дженериков, и что?
Надеюсь, что и не будет никогда.
Нравятся дженерики - пиши на шарпе.
Аноним 10/01/21 Вск 00:48:35 190623943
>>1906234
> Книжку хоть одну прочёл?
Нет, я в озоне работаю уже больше года. Продемонстрировал одну из неочевидных фич и в шутку выебал Роба Пайка, а что не нравится? Могу себе позволить, т.к. знаю все такие детали языка.
Аноним 10/01/21 Вск 00:52:50 190624144
>>1906239
Твой высер показал что детали языка ты не знаешь
Аноним 10/01/21 Вск 01:12:37 190624645
Аноним 10/01/21 Вск 03:12:42 190628646
>>1906239
Как я понял, тут дело в том, что массивы (и слайсы) в го хранят объекты, а не ссылки на них. Т.е. нужно знать размер объекта, чтобы делать то, что ты хочешь.
Поэтому, тут никакие дженерики не помогут.

>>1906241
Но, почему то же самое не работает с указателями?
У указателей тоже разный размер, или что?
Аноним 10/01/21 Вск 03:37:36 190629447
>>1906286
>Как я понял, тут дело в том, что массивы (и слайсы) в го хранят объекты, а не ссылки на них. Т.е. нужно знать размер объекта, чтобы делать то, что ты хочешь.
Не совсем так, в массивах и слайсах можно хранить как объекты, так и ссылки.
>Поэтому, тут никакие дженерики не помогут.
Это же типичная ситуация, когда дженерики как раз и помогают
>>1906286
Указатели все имеют одинаковый размер, а вот интерфейсное значение и указатель - разное. Такой дизайн сделан сознательно, чтобы не прятать за магию операцию, требующую О(n) алокаций интерфейсных значений. Если тебе реально нужно преобразовать слайс объектов в слайс интерфейсных значений - сам напишешь лишние 5 строчек.
Аноним 10/01/21 Вск 14:11:23 190642048
>>1906286
Лол, дженерики именно для этого и нужны, по большому счёту.
Аноним 10/01/21 Вск 14:12:07 190642149
Как в Го получить ассерты, бесплатные в релиз-версии?
Аноним 10/01/21 Вск 14:18:16 190642850
>>1906420
Удваиваю.
Хорошо, что дженерики таки будут.

btw, можно было бы сделать так, чтобы можно было сделать []interface{}([]Object) вместо ручных for'ов. Хотя дженерики и это решат.
Аноним 10/01/21 Вск 14:27:31 190643851
>>1906421
Чего? Какие ассерты?
Аноним 10/01/21 Вск 14:28:23 190644052
>>1905210 (OP)
после Сишки, Го кажется уебищным языком, это норма? к этому привыкаешь? Есть тут бывшие сишники, поделитесь успехом...
Аноним 10/01/21 Вск 14:28:49 190644153
>>1906428
Нет, иди нахуй. Будешь заполнять в цикле, как остальные крестьяне. Вон этому отшибленному в кайф это делать из раза в раз >>1906294
Аноним 10/01/21 Вск 14:29:33 190644254
>>1906440
После сишки даже плюсы кажутся уебищным языком. Привыкай.
Аноним 10/01/21 Вск 14:34:30 190644555
>>1906438
>>1906421
Спасибо, уже нашел, оказывается, в Го таки есть условная компиляция.
Аноним 10/01/21 Вск 14:34:38 190644656
>>1905942
>поинтеры это реальные поинтеры в память, а не просто сахар

Не совсем: https://golang.org/doc/faq#stack_or_heap . TL;DR : арифметика указателей инкапсулирована в самих конструкциях языка. Переменные созданные в скоупе функции, лежат на стеке если они хранят небольшое количество байт и на них нет указателей или они есть но не выходят за пределы скоупа функций. Иначе переменная создается в куче. Вот в C/C++, Rust есть голые указатели которые дают полный контроль над памятью.
Аноним 10/01/21 Вск 14:37:00 190644757
Какой же ебанутый майндсет. https://golang.org/doc/faq#assertions
"Глупые программистишки не отличают ошибки, которые нужно обрабатывать, от дебажных ассертов, поэтому мы их не сделали))0"
Аноним 10/01/21 Вск 14:40:04 190644958
>>1906445
Объясни что такое бесплатные ассерты в го, блять.
Аноним 10/01/21 Вск 14:40:52 190645059
>>1906449
Которые не проверяются в релизной версии
Аноним 10/01/21 Вск 14:42:19 190645160
>>1906446

Алсо Java JIT похожим образом оптимизирует аллокации. См. escape analysis
Аноним 10/01/21 Вск 14:45:42 190645261
>>1906450
>>1906447
А зачем они нужны? Не проще код просто писать так, чтобы значения не пидорасило в разные стороны? По идее ты можешь написать функцию эту сам, или я ошибаюсь и ассерт - это больше, чем тупо функция, кидающая панику при неверном кондишене в её аргументе?

Если что у меня нет бэкграунда в сях, просто рил интересно
Аноним 10/01/21 Вск 14:45:56 190645362
>>1906446

Иначе можно договориться что и ЖС "байтоебский язык" ведь в нем есть указатели.
Аноним 10/01/21 Вск 14:51:20 190645563
>>1906446
Почему не совсем? То, что хипа/стек определяется автоматически - не значит, что поинтер это не поинтер. Го это язык со сборщиком мусора, поэтому логично, что тебе не нужно руками в память писать. Но ты можешь спокойно сам аллоцировать память (правда в обход GC, т.е. придется еще позаботиться о том, чтобы за собой убрать), есть целые техники в го даже с этим связанные. Но если тебя не ебет перформанс в рот - проще довериться gc, он умён не по годам, так сказать.

>>1906451
В го это тоже escape analysis
Аноним 10/01/21 Вск 14:53:46 190645664
>>1906453
В жс не поинтеры, там референсы, как в том-же ПХП. Просто имитация на уровне интерпретатора. Го например аллоцирует все на реальной куче и стеке, а жс вообще интерпретируется, там столько абстракций, что ахуеешь.
Аноним 10/01/21 Вск 15:05:39 190646365
Я конечно дика извиняюсь, но у меня с члена капает при виде каловых масс? Это запах романтики...


с ув. maxmol
Аноним 10/01/21 Вск 15:07:29 190646766
>>1906456
мне не интересно
мазохизм какой-то
зачем аллоцировать все на реальной куче?

с ув. калцоур
Аноним 10/01/21 Вск 15:09:23 190646967
>>1906463
Ты заебал уже, весь сосач засрал своей молявфренией.
Аноним 10/01/21 Вск 15:09:45 190647068
>>1906469
в курсе его мать родная в унитах хотела смыть жаль не поместился и пришлось по старинки ебашить кирпичом по голове но он почему то выжил и даже научился копировать хелло ворлды на луа и выдавать за свой аддон
Аноним 10/01/21 Вск 15:10:30 190647269
>>1906467
Мать твою оталлоцировал на куче, чмо
Аноним 10/01/21 Вск 15:11:23 190647470
>>1906472
ей не впервой брателла грря гучигенг)

с ув. шмакалявко
Аноним 10/01/21 Вск 15:12:11 190647571
>>1906472
Покажи мне человека который этого не делал, лол.
Аноним 10/01/21 Вск 15:13:34 190647772
вы далбёбы на луа песать надо
тут дух старой школы живёт скрря
выне паньмаете что гоу это мазохищм нахуй???

с ув. шлакомол
Аноним 10/01/21 Вск 15:14:32 190647873
>>1906477
Калцуровсратого молявошнобеля с калопластомой головного мозга забыть спросили.
Аноним 10/01/21 Вск 15:16:32 190648274
image.png 8Кб, 287x136
287x136
Аноним 10/01/21 Вск 15:17:44 190648375
Аноним 10/01/21 Вск 15:18:20 190648476
>>1906483
а можна я чиркаль со штанов сгризу м)
я очнь галодний меня в макдудльсе забанили за перееданее

с ув. копромол
Аноним 10/01/21 Вск 15:23:32 190648977
Аноним 10/01/21 Вск 15:25:12 190649178
>>1905942
>можешь руками память чистить с вырубленным gc
Можно подробнее? Или это просто :
n := &T{}
n = nil
?
Аноним 10/01/21 Вск 15:33:32 190649679
>>1906482
Как тема называется?
Аноним 10/01/21 Вск 15:37:05 190649980
Аноним 10/01/21 Вск 15:38:01 190650181
1610282279565.png 1Кб, 134x48
134x48
>>1906499
ахахахахаха
похуй не важно спс
Аноним 10/01/21 Вск 15:39:08 190650282
>>1906501
Наоборот чувствуешь себя master, на которого нигирийцы работают и тему на блюдечке подносят, не шаришь.
Аноним 10/01/21 Вск 16:24:52 190653283
>>1906446
Гошный компилятор намного продвинутее чем кажется
Многие почему-то думают что слайсы значит хип
Аноним 10/01/21 Вск 16:29:43 190653784
>>1906532
Никто не спорит, компилятор и инлайнинги делает и кучу разных оптимизаций, пока до машинного кода дойдет - твоя программа вообще может быть не похожа по синтаксису на то, что ты изначально в своей ide наговношлепил.
Аноним 10/01/21 Вск 17:21:06 190660685
>>1906455
>То, что хипа/стек определяется автоматически - не значит, что поинтер это не поинтер

Правильно. Это значит что поинтер - не прямой поинтер в ОЗУ в отличие от звездочки в Си/Крестах (хотя и выглядит также).

>>1906456

Референсы - это поинтеры, которые компилятор/интерпретатор дереференсит за тебя в контекстах их использования.

> а жс вообще интерпретируется

Это если JIT компилятору не удалось угадать типы аргументов и локальных переменных функции. Интерпретируемость никак не относится к тому, как выделяется память в языке. В ЖС различаются stack allocated vs heap allocated variables, и это также достигается escape analysis-ом как и в Го-шке.
Аноним 10/01/21 Вск 17:21:57 190661186
>>1906606

Точнее, stack vs heap allocation of data.
Аноним 10/01/21 Вск 17:57:44 190666787
>>1906606
>Это значит что поинтер - не прямой поинтер в ОЗУ в отличие от звездочки в Си/Крестах (хотя и выглядит также).
Не прямой поинтер - это как?
Аноним 10/01/21 Вск 17:58:41 190667188
>>1906606
От того, что появляется сборщик мусора, поинтеры не перестают быть поинтерами.
Аноним 10/01/21 Вск 18:02:10 190667689
>>1906421
А в чём проблема сделать 2 функции

// +build default

func assert(callback func() bool) {
if callback() {
panic("assertion failed")
}
}

и

// +build prod

func assert(_ func() bool) {}

??
И при компиляции пустая функция просто скипнется.
Аноним 10/01/21 Вск 18:39:24 190672490
>>1906676
Зачем ты байтоебу отвечаешь? Он в прошлом треде доебывал почему это его любимого Variant нет в го.
Аноним 10/01/21 Вск 19:10:27 190674691
Аноним 11/01/21 Пнд 14:32:40 190729692
>>1906501
Негры пашут ради барина, а он еще и не рад, тьфу
Аноним 11/01/21 Пнд 15:40:49 190744693
>>1906151
> Да высокоуровневый го язык

Ага, именно поэтому на каждом втором собеседовании просят пояснить за связный список и какие есть проблемы с кешами процессора и еще кучу байтоебских вещей.
Аноним 11/01/21 Пнд 19:44:30 190770094
>>1907446
> просят пояснить за связный список
> кучу байтоебских вещей
жс макака, ты?
Аноним 11/01/21 Пнд 22:36:11 190786895
TjKEhtklXIU.jpg 36Кб, 600x626
600x626
Прохожу тур по го.
>методы и прочее, 22 из 26
>Implement a Reader type that emits an infinite stream of the ASCII character 'A'.
>Реализуйте тип Reader, который испускает бесконечный поток символа ASCII «A».
>Нихуя не понял, бился 3 часа в попытках честно написать код самостоятельно.
>2 года не курил, снова начал
>Заебало, загуглил
>реализация метода https://gist.github.com/rndD/5ba3c7c9883de396a4ea оказывается должна считать количество символов А, которыми заполняется массив

Объясните мне это блядство пожалуйста.
Я уже по горло сыт этими ебучими условиями и омерзительной подачей материала
Аноним 12/01/21 Втр 02:35:33 190799096
16090810627330.png 8Кб, 215x234
215x234
>>1906482
Надо следующий тред с этой картинки начать
Аноним 12/01/21 Втр 02:42:18 190799597
>>1907868
Да, это довольно не очевидный момент - ридер это тип, который не просто имплементит метод, но еще и соответствует 6 абзацам комментариев над интерфейсом https://golang.org/pkg/io/#Reader
Аноним 12/01/21 Втр 03:45:41 190801698
>>1907700
> жс макака, ты?
> за связный список и какие есть проблемы с кешами процессора

Ты сразу же обосрался, ибо если бы хоть немного шарил в теме - понял бы, что связный список и проблемы с кешами - это один общий логический блок. В итоге ты половину фразы вырвал и обосрался.
Аноним 12/01/21 Втр 03:48:14 190801899
>>1907995
>>1907868
> Объясните мне это блядство пожалуйста.
А что не понятно то? Тебе просто нужно высрать 'A' в переданный массив байтов, вот и все. Проблема то в чем?
Аноним 12/01/21 Втр 04:03:59 1908024100
>>1907868
Ну ты не понял сути ридер интерфейса как и не смог в чтение спецификации методов, лол
Аноним 12/01/21 Втр 10:55:12 1908120101
1577046415ideal[...].jpg 149Кб, 1440x900
1440x900
>>1908018
Под блядством я подразумевал омерзительную подачу материала.
Это же тур по го, верно? Обязательный для вкатывающихся, как описано в шапке, да?
Кал говна ёбаный.
Материал нормально подается вплоть до описания методов. Потом кучкой идет чисто теория, где тебе надо посмотреть код и прожать кнопку далее и никакого закрепления работы с указателями, методов, интерфейсов нет. А это 80% от этапа по количеству шагов. Остальные 20% - это уже новый материал, краткий пример работы с ним или вообще его отсутствие и непонятное описание того, что от тебя хотят в шаге упражнения.

>>1907995
Спасибо. Только это должно было быть описано в туре, а не на дваче, лол.

Существует нормальная замена этому туру по го?
Я дошел до rot13Reader и вообще ничего не понял.
Я могу гуглить примеры, но это не то, как должно проходить обучение, ящитаю.
Аноним 12/01/21 Втр 11:06:40 1908123102
>>1907446
Это всех просят пояснить. Это базовая компьютерная грамотность.
Аноним 12/01/21 Втр 14:00:48 1908226103
>>1908120
Так тур - это просто вводное ознакомления. Он и не создан для того, чтобы ты вышел из него топ знатоком голэнга.
Аноним 12/01/21 Втр 14:01:42 1908228104
>>1908123
Питонистов и Джавистов не просят
Аноним 12/01/21 Втр 14:09:13 1908231105
>>1908123
Компьютерсаенс-шиз, ты?
Аноним 12/01/21 Втр 14:18:46 1908239106
>>1908120
> Существует нормальная замена этому туру по го?
Так он ахуенный же. По всем основам языка галопом пробегаются. Это же не онлайн курс, тур предполагает как раз ТУР, т.е. ОЗНАКОМЛЕНИЕ с языком. Если что не понятно - нужно гуглить, а не надеяться, что тебе в коротком туре объяснят все до самых мелочей.

А ридеры и райтеры - это тема специфичная, ты её поймешь только после пары крупных статей и самостоятельного дрочева.
Аноним 12/01/21 Втр 14:23:28 1908244107
>>1908239
Спасибо, приободрил.
Но вообще это выглядит как требование решать рокетсаенс после биквадратных уравнений.
Чуствуешь себя, будто отвлекся на минуту и пропустил объяснение, а объяснения и не было. Зачем тогда там упражнения...
Ладно, я просто попозже вернусь к этому.
Аноним 12/01/21 Втр 14:41:01 1908256108
>>1908244
Да я сам ахуевал с этих reader/writer. Т.е. как работают понимал, но нахуй настолько низкоуровневая абстракция нужна - не понимал. А когда код начинаешь писать и встречать их везде - понимаешь, что это ахуенный способ перенаправлять потоки байтовой/строковой информации, например os.stdout это readwriter, как и файл. Короче очень удобная хуйня, когда начнешь с stdlib разбираться подробнее.
Аноним 12/01/21 Втр 18:10:22 1908381109
>>1908256
Классика же, а какую абстракцию потоков байтов ты ожидал увидеть?
Аноним 12/01/21 Втр 18:34:16 1908426110
>>1908381
Ну я не видел ничего подобного в других языках (не считая чтения с файла), в го впервые столкнулся с настолько аскетичным решением и настолько утвержденным интерфейсом на всю экосистему.
Аноним 12/01/21 Втр 21:09:44 1908589111
>>1908426
Чтение из файла - это фундаментальная абстракция в unix-like осях, на которой работает все
Аноним 13/01/21 Срд 03:29:25 1908823112
image.png 187Кб, 985x857
985x857
>>1905210 (OP)
ДЖЕНЕРИКИ

Начался процесс апрува последнего диз документа для дженериков :https://blog.golang.org/generics-proposal

Обсуждение вынесено в соответствующий issue на гитхабе: https://github.com/golang/go/issues/43651

Если кратко - в результате этого процесса принимается окончательное решение принимать ли диздок к ИСПОЛНЕНИЮ, поставить на паузу, или полностью отклонить. Отклонять конкретно данное изменение не будут, по сути сейчас происходит процесс окончательного утверждения дизайндока, возможно отправится на доработку.
Аноним 13/01/21 Срд 03:48:32 1908829113
>>1908823
Скоро в го останется не 100500 вещей, над которыми можно орать, а всего 100499
Аноним 13/01/21 Срд 03:57:29 1908830114
image.png 1353Кб, 1189x1189
1189x1189
Аноним 13/01/21 Срд 03:58:31 1908831115
>>1908829
В твоей мамаше места под хуй не останется зато
Аноним 13/01/21 Срд 10:00:33 1908887116
>>1908823
> func F[T any](p T) { ... }
Здравый смысл восторжествовал, и типы теперь не в уебанских круглых скобках.
Аноним 13/01/21 Срд 11:12:41 1908913117
Лампово тут у вас, поцоны. Подпишусь, пожалуй.

мамкин киберсекс с кризисом среднего возраста, решивший на старости лет вяло перетечь в погроммисты из говна безопасности
Аноним 13/01/21 Срд 16:12:23 1909078118
>>1908887
Чую кучу говнокода не читаемого теперь будет
Аноним 13/01/21 Срд 16:14:26 1909079119
>>1909078
Лучше, чем костыли с кодогенерацией через vasyan tool.
Аноним 13/01/21 Срд 16:43:52 1909105120
>>1909079
Как мне теперь оправдывать свое хуепинание? Раньше говорил, что ПРОВЕРЯЮ БЕЗОПАСНОСТЬ КОДОГЕНЕРАТОРА :(((
Аноним 14/01/21 Чтв 02:05:29 1909592121
>>1877742 →
Чистый код читай. Если коротко - весь файл целеком ты все равно не запомнишь, неважно, там 2-3 экрана текста или 15, да и детали реализации методов не важны, пока ты не знаешь где и при каких условиях они вызываются (см любой доклад Григория Петрова, например вот https://www.youtube.com/watch?v=z5WkDQVeYU4).[РАСКРЫТЬ] Тебе в любой момент времени, когда ты смотришь на код, важнее как методы между собой взаимодействуют, а на вопрос - что они сами, непосредственно, делают, тебе в значительной мере должно ответить имя метода. Если же нужно поподробнее - тогда переходишь в скоуп определения функции и уже там повторяешь эти же действия. В большинстве случаев ты , вызывая fmt.Printf думаешь о том, что он выведет тебе что-то в терминал, а не о том, что оно распарсит строку формата, для каждого аргумента чекнет, имплементит ли он один из 3-х методов, меняющих поведение преобразование их в стрингу, в случае дефолтного флага из строки темплейта, если он отличается от дефолтного, скорректировать так же приведение к стринге и на его основании, составит из этого всего слайс байт и запишет этот слайс в специальный файл операционной системы, чтобы результат вывелся на экран.
Аноним 15/01/21 Птн 05:16:13 1910429122
>>1908823
Ну ещё годик и завезут
Аноним 15/01/21 Птн 18:18:58 1910900123
Кто-то пилил voip (voice over ip) сервер на го? Расскажите что да как, с какими проблемами сталкивались?
Аноним 15/01/21 Птн 19:14:49 1910961124
Вопрос вообще по хаскелю, но его тред мертв и в нем тоже зеленые треды и думаю, они работают одинаково.
Вот у шарпах и джсах есть async await. Когда есть длинная IO операция, например скачать файл, то чтобы не лочить основной поток, ты просто передаешь лямбду которая в качестве аргумента примет тот файл. В результате в этом же потоке можно выполнять другой код, а когда файл скачается, то что-то где-то запустит твою лямбду.
А что с этими зелеными потоками? Они тоже эту задачу решают? Потому что в моем понимании, если вызвать такой поток с ио операцией, то у тебя просто будет два потока, один из которых просто будет простаивать и ждать закачки файла. Или рантайм дохуя умный, поймет что поток нихуя не делает и засуспендит его? А откуда он тогда будет знать, когда файл скачается и что надо снова запустить поток?
15/01/21 Птн 19:27:36 1910975125
>>1910961
> А откуда он тогда будет знать, когда файл скачается и что надо снова запустить поток?
а джс откуда знает, маня? вот и гошечка оттуда же

мимо сениор энтерпрайз goфер
Аноним 15/01/21 Птн 19:27:45 1910976126
>>1910961
Ну смотри, есть процесс, у него есть очередь с горутинами, он берет из нее горутину и выполняет её в отдельном ос-треде, если горутина переходит в режим ожидания, то планировщик перемещает её обратно в очередь, переключает контекст и берет следующую. Так работает планировщик в го, если у тебя один процесс. В случае ели процессов несколько, то происходит кража горутин и тд. Как это работает в хачкеле, хз.
Аноним 15/01/21 Птн 20:00:10 1911014127
>>1910961
> А что с этими зелеными потоками? Они тоже эту задачу решают?
Вообще ничем не отличается, можешь также ждать окончания в каком-то месте с помощью канала, можешь забить хуй и точно также выполнить по окончанию что хочешь. Можешь мьютексами жонглировать. Вопрос то твой в чем?

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

Мимо ГОвноеб миддл разработчик
Аноним 15/01/21 Птн 20:02:13 1911018128
Kek
Аноним 15/01/21 Птн 20:24:09 1911057129
>>1910975
> мя завут апущенный дауненак=)
В следующий раз как будешь подписываться используй курсив.
Аноним 16/01/21 Суб 00:26:00 1911350130
>>1911014
То есть когда в гринпотоке запускается ио операция, он помечается "спящим", но также создается и каллбэк, при вызове которого поток перестает быть спящим, и значит рантайм его в скором времени запустит, да?

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

И какие преимущества/недостатки у потоков? Я вижу только плюс - не надо помечать каждую функцию асинхронной, рантайм сам поймет какой поток спит.
Аноним 16/01/21 Суб 00:29:31 1911352131
>>1911350
> не надо помечать каждую функцию асинхронной
Я про то, что в шарпе для каждой io функции есть асинхронный дубликат, типа File.Read() и File.ReadAsync(). Ну и если я придумаю свою асинхронную либу для хаскеля, то мне придется писать обертки для КАЖДОЙ io функции, тогда как с гринтредами тупо пишешь forkIO <youriofunction> и оно сработает.
Аноним 16/01/21 Суб 00:53:29 1911366132
>>1911350
> То есть когда в гринпотоке запускается ио операция, он помечается "спящим"
Ну если грубо - то да, так.

> но также создается и каллбэк, при вызове которого поток перестает быть спящим
Я не знаю что ты имеешь в виду под коллбэком. Когда в горутине происходит сис колл - происходит её блокировка, сразу же происходит подруб планировщика на физическом потоке (го запускает по одному планировщику на каждый реальный поток) и планировщик перемещает эту горутину в очередь и берет из этой очереди горутину, которая не "ждет" ничего, и кидает её на выполнение в этом же физическом потоке. Когда от ОС возвращается ответ (прерывание) по сис коллу - эта заблокированная горутина переходит в "готовые продолжить пахать на барина", при последующем прогоне планировщика - он может продолжить её выполнение (а может и другую, как сам вздумает своими алгоритмами).

Планировщик самого ГОвна работает схожим образом с планировщиком процессов в самой ОперационнойСистеме, в ОС обычно есть 3 состояния у процесса на физическом потоке - runnable (т.е. можно дать ему процессорного времени, т.е. закинуть на физ. поток), waiting (процесс ждет ответа системного вызова, его игнорим) и executing (процесс прямо сейчас выполняется на потоке). В ГОвне схожим образом работают горутины, но уже не на физических потоках, а в абстракции зеленых конкурентных.

> В моем понимании, в системные вызовы можно передать каллбэк, который в шарпе, к примеру, запускает юзерский код после слова await, а в го помечает тред как "неспящий".
Чушь спизданул. Ты пиздец путаешь понятия, либо в теме не разбираешься. Я тебе расписываю как сам планировщик грин тредов в го работает, а не как на уровне кода и функций ты это пишешь. На уровне кода что в шарпе что в голэнге примерно одинаково эта концепция работает, только в голэнге она сильно проще пишется, есть только одно ключевое слово 'go', и все, пишешь 'go mamuEbal()' и твоя функция улетает выполняться асинхронно (не сразу, но в детали вдаваться не буду), никаких коллбэков. А для того, чтобы ждать её выполнения, чтобы эти прцоессы могли взаимодействовать между собой - уже есть разные средства в голэнге, начиная от каналов и заканчивая атомными операциями или мьютексами те же.

> И какие преимущества/недостатки у потоков?
Чего? Что с чем сравниваешь, недостатки в сравнении с чем?
>Я вижу только плюс - не надо помечать каждую функцию асинхронной, рантайм сам поймет какой поток спит.
Я тебя не понимаю, что помечать, какой поток спит? Что в шарпе что в ГОвне работает все примерно одинаково, просто конструкции языка разные и в ГОвне это все очень просто реализовано, в шарпе больше головной боли, когда дело доходит до взаимодействия между несколькими потоками.
Аноним 16/01/21 Суб 00:57:19 1911369133
>>1911352
> типа File.Read() и File.ReadAsync()
Нет, в ГОвне ты можешь любую функцию в любой момент времени выпустить в отдельный тред. Естественно если ты будешь пытаться одновременно писать и читать из файла - получишь пиздов, но я думаю это и так очевидно.
Аноним 16/01/21 Суб 01:18:27 1911380134
>>1911352
>>1911350
Я допер что ты хочешь. Если кратко - обе модели асинхронности (грин тредов) заебись, в шарпе сильно сложнее, но гораздо больше возможностей по настройке, а в голэнге прям очень простая, но и вариантов тюнинга очень мало. По скорости шо то шо это примерно одинаковы на дженерик задачах, но в шарпе потенциально в некоторых случаях можно выиграть, если будет специфичный сценарий, а в голенге дальше горутин не залезть по сути.
Аноним 16/01/21 Суб 01:42:51 1911397135
>>1911366
>Я не знаю что ты имеешь в виду под коллбэком.
Я так называл системные прерывания. Только что прочитал что это. Мб с терминами я и попутал, но представлял я себе это именно так, как ты описал.
>>1911369
>Нет, в ГОвне ты можешь любую функцию в любой момент времени выпустить в отдельный тред. Естественно если ты будешь пытаться одновременно писать и читать из файла - получишь пиздов, но я думаю это и так очевидно.
Ну я же про это и говорю! В го ты перед тем что хочешь запустить асинхронно пишешь 'go', в хаскеле 'forkIO' или async, если стороннюю либу юзать
> По скорости шо то шо это примерно одинаковы на дженерик задачах, но в шарпе потенциально в некоторых случаях можно выиграть
Простой пример - он быстрее когда твоя задача потенциально асинхронная. Типа есть функция 'if (hasInCache) return fromCache else await returnFromDb()'; В го при вызове такой функции ты по любому создашь гринтред, тогда как в шарпе, с ValueTask если обьект все таки есть в кеше, даже на кучу нихуя выделять не придется.
Аноним 16/01/21 Суб 02:18:20 1911432136
1. Зачем в го возможность объявлять получателя метода по указателю и без? Почему всегда не передавать указатель на получателя в метод? Метод, привязанный не к указателю всегда будет получать копию структуры. Но какой это имеет смысл, если из-за этого теряется вся идея ООП-моделирования объектов с изменяемым внутренним состоянием? Если мне так нужны иммутабельные объекты, то мне все равно придется руками возвращать из функции копию объекта с новым состоянием. Два способа объявления методов только запутывают, тем более это странно для языка, который позиционирует себя как максимально простой и недвусмысленный.
2. Насколько вообще оправдано использование указателей? Когда я первый раз услышал, что в го есть и гц и указатели, мне это сразу показалось странным. Любые большие объекты - строки, слайсы, мапы - все равно передаются по указателям (ну или около того, главное, что их содержимое целиком не копируется) и на них и так работает гц. В то же время, любой возвращенный по указателю объект создает нагрузку на гц и эта нагрузка порой очень значительна. По-факту получается, что, скажем, гонять структуры между горутинами через каналы выгоднее полным копированием, потому что их передача по указателям просаживает перфоманс. Или я не прав? Во всяком случае мои простые бенчмарки показывают, что между двумя горутинами в канале быстрее передаются копии структур, а не указатели. В то же время невозможность через интерфейс вызвать метод с получателем-указателем не у указателя (преобразование, которое без интерфейсов делает компилятор) заставляет все объекты, скрытые за интерфейсами возвращать по указателям. Из-за этого частично мой 1-й вопрос: почему нельзя было убрать нафиг привязку методов к разным получателям, всегда передавать указатель на объект в метод (разумеется, гц тут задействован бы не был) и убрать вообще указатели целиком в unsafe? В коде бы стало гораздо меньше бардака и больше предопределенности.
Аноним 16/01/21 Суб 03:31:04 1911462137
>>1911432
> Зачем в го возможность объявлять получателя метода по указателю и без?
Шоб было.
> Но какой это имеет смысл, если из-за этого теряется вся идея ООП-моделирования объектов с изменяемым внутренним состоянием?
А голэнг и не ООП язык, в нем всё - тип.
> Если мне так нужны иммутабельные объекты, то мне все равно придется руками возвращать из функции копию объекта с новым состоянием.
Ну да, как и во всех других языках, лол. А ты что хочешь?
> Два способа объявления методов только запутывают
Чем? Ресивер без поинтера - это аналог статическим методам в других языках. Чем тебя это запутывает? Или ты про то, что человек, использующий метод - не знает четко какой ресивер, пока не посмотрит? Так ему и не нужно знать детали имплементации в большинстве случаев, а когда надо - он все равно полезет в доки, а в голэнге документирование функции происходит прямо над методом. Соответственно любой, кто не знает что метод делает - сразу же все поймет глянув поп ап в IDE.

> Насколько вообще оправдано использование указателей?
Только тогда, когда нужно отдать именно указатель, а не копию. Ты верно дальше подметил, что из-за ГЦ убивается весь потенциальный смысл использовать ссылки для ускорения выполнения, это и правда недостаток модели ГЦ. В шарпе тоже есть поинтеры, но там более удачная архитектура, не создающая столько оверхеда.
> Когда я первый раз услышал, что в го есть и гц и указатели, мне это сразу показалось странным
Но ГЦ есть во многих языках с указателями, почему только в ГО тебе это показалось странным? Нужно не на сам факт ГЦ грешить, а на то, что он медленно подбирает с хипы аллокации такие, в шарпе тоже гц их собирает, но гораздо шустрее.
> В то же время, любой возвращенный по указателю объект создает нагрузку на гц и эта нагрузка порой очень значительна.
Со слайсами (и остальными ссылочными типами) точно также, создается оверхед, ибо аллоцируется все в хипе. Таков путь.
Но в защиту поинтеров могу сказать, что обычно их используют в долгоиграющей перспективе, т.е. твои бенчмарки с простым возвращением поинтера - это синтетический тест, заранее направленный на провал, ибо ты создаешь тысячу объектов поинтерами, в реальном коде ГЦ не будет их подбирать в большинстве случаев, т.к. они будут жить гораздо дольше микросекунд. Но, конечно, это не полноценное оправдание, а больше заметка, что все на настолько хуево, как в синтетическом бенчмарке с кучей аллокаций.
> По-факту получается, что, скажем, гонять структуры между горутинами через каналы выгоднее полным копированием, потому что их передача по указателям просаживает перфоманс. Или я не прав?
Если ты планируешь этими значениями дальше пользоваться, то перформанс будет обратно пропорционален времени от аллокации до сборки мусора. Если это рядовые флаги, которые ты чекнешь и забудешь - передавать по значению, если это объекты, которыми дальше будешь пользоваться - то ссылочный оверхед уменьшается (но не уходит полностью, естественно).

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

На самом деле мне вообще не нравится сахар в го, когда дереференс автоматически происходит, мне было бы гораздо удобнее самому дереференсить и интерфейсы и возвращаемые ссылки, ибо как раз из-за такого сахара и появляются недопонимания типа твоего. Интерфейс в го - это тип, конкретный такой тип, и относиться к нему нужно как и к другим типам, никакой магии особой за ним нет, кроме компилятора.
Аноним 16/01/21 Суб 16:27:05 1911891138
image.png 16Кб, 747x271
747x271
image.png 13Кб, 743x269
743x269
>>1905210 (OP)
>лучший в мире язык
Обосраться просто. "Лучший в мире язык"
Полистал тут на досуге мануал по Го и охуел. Что это за уебство? Язык сам по себе мощный засчет свой многопоточной модели но сам код это что-то с чем-то.
Вот что за наркоман придумал экспортировать имена по заглавной букве блять? Что это и главное - нахуя? Почему я не могу как нормальный человек писать export перед переменной?
Можно делать "голый return" блять, в любом нормальном языке конструкция return без ничего возвращает null, тут же она блять вернет объявленные в теле функции переменные, ебануться, подозреваю за такие return-ы без ничего надо сразу увольнять нахуй потому что обмудку видите ли было лениво записать явно переменные
var можно писать при объявлении а можно и хуй забить, заебись, TS на норм проектах уже давно не скомпилится если такое вытворишь, но в "лучшем в мире языке" это с какого-то хуя является фичей
ООП парадигма не юзается, только вот и функциональщина тоже на уровне говна

Лучше уж останусь на ноде и TS
Аноним 16/01/21 Суб 16:37:25 1911906139
>>1911891
> Язык сам по себе мощный засчет свой многопоточной модели но сам код это что-то с чем-то.
Так на хаскель переходи, там тоже гринпотоки. И дженерики есть, круче чем в любом другом языке.
Аноним 16/01/21 Суб 16:38:09 1911907140
>>1911891
На мнение такой жалкой хуйни как ты мне абсолютно похуй, жаль твою мать что она не смыла тебя в туалет когда ты кубарем вывалился из её пизды
Аноним 16/01/21 Суб 16:39:11 1911908141
>>1911891
> я хасю жрать гавно уааа!!
Я тебя услышал, а теперь закрой тред и пиздуй делать уроки, школьник залётный.
Аноним 16/01/21 Суб 16:39:58 1911909142
>>1911907
Погори еще, чухоня
nodejs господин тебе разрешил
Аноним 16/01/21 Суб 16:53:41 1911925143
>>1911891
> голый return
Наверняка это говно заимствовано из чего-то вроде паскаля, там вообще функция_нейм := возвращаемое_значение.
Аноним 16/01/21 Суб 17:13:14 1911966144
>>1911909
Своей гнилодырой шалаве мамаше будешь указывать, говно, которая высрала тебя на этот свет в диком алкоугаре пока я её пиздил по пузу
Аноним 16/01/21 Суб 17:57:14 1912020145
>>1911891
Про голый return действительно хуёво вышло, по всему остальному сразу понятно, что даже не пытался что-то писать.
Аноним 16/01/21 Суб 18:06:15 1912025146
1610809574914.png 145Кб, 512x512
512x512
>>1912020
Зачем ты отвечаешь залётному школьнику с разумом мартышки?
Очевидно же, что он только оканчивает девятый класс.
Аноним 17/01/21 Вск 12:21:55 1912501147
>>1912020
а что хуевого-то? в сигнатуре функции же объявляется название возвращаемой переменной. не говоря уже о том, что можно сделать непустой return, явно присвоим значение возвращаемой переменной. имхо, удобно
Аноним 17/01/21 Вск 15:28:24 1912775148
>>1912501
> имхо, удобно
Нет, добавляет лишний вектор внимания. Ни разу не видел, чтобы использовали такой возврат в коде.
Аноним 17/01/21 Вск 18:21:59 1912958149
>>1905210 (OP)
нахуй нужен го если есть пайтон
Аноним 17/01/21 Вск 18:28:06 1912965150
>>1912958
> пайтон
Это который медленный, с GIL и динамической типизацией?
Аноним 17/01/21 Вск 20:25:31 1913263151
>>1912958
> зачем нужен си, когда есть сишарп
Аноним 17/01/21 Вск 20:38:31 1913289152
>>1912965
Да.Это тот, в котором в 2021м году можно сложить числа в массиве и при этом не насрать 30 строк
Аноним 17/01/21 Вск 20:52:21 1913309153
>>1913289
> сложить числа в массиве
> в питоне нет массивов

Хуя познавший вселенную затирает про свой любимый питон. Шизик, ты бы хоть типы в своем языке выучил, прежде чем сраться за то, кто где лучше. Хотя сам факт, что ты пришел серить в чужой тред этой хуйней - говорит о тебе, как о человеке низкого интеллекта. Так уж и быть, на первый раз простим блаженного, но больше не пиши сюда, чмок :*
Аноним 17/01/21 Вск 20:55:47 1913319154
>>1913289
Так часто массивы суммируешь? Понимаю, хаскеллисты вон вообще факториалы любят считать.
Аноним 17/01/21 Вск 21:13:44 1913364155
image.png 6Кб, 336x146
336x146
>>1913289
> в 2021м году можно сложить числа в массиве и при этом не насрать 30 строк

Долбаеб, совсем ебнулся там уже в своем загоне ПАЙТОН РАЗРАБОТЧИКОВ?
Аноним 17/01/21 Вск 21:20:58 1913386156
>>1913289
Зато конкурентность и паралелизм удобно имплементировать. А в питоне такая ебень с этим asyncio, так ещё и GIL, пиздец просто, постоянно приходится узкие места на С переписывать, я бы тебя понял если бы ты противопоставил Джаву какую нибудь. А про сумму ты вообще хуйню написал, в ML алгоритмах её конечно часто используют, но мы тут байтоёбим и круды шлепаем, кто-то сервисы всякие интересные пилит, пока что ни разу не приходилось использовать сумму массива, на столько часто, чтобы мне понадобилась функция sum. Покормил зелёного.
Аноним 17/01/21 Вск 21:44:25 1913438157
Аноним 17/01/21 Вск 23:51:35 1913611158
>>1913364
>это цикл for для суммы массива...
Блять, пистонисты и го-дрочеры совсем там уже пизданулись и отучились прогать как белые люди?
жс-бог решает такую задачу максимально нативно в 1 reduce
Аноним 18/01/21 Пнд 00:03:31 1913621159
>>1913611
> пистонисты
Как насчёт более "нативного" решения в один sum?
Аноним 18/01/21 Пнд 00:04:44 1913623160
>>1913309
> в питоне нет массивов
Это бы ты для начала подучил хоть сколько-нибудь матчасть. Охуеешь узнав что list на самом деле нихуя не linked list а динамический массив блять
Аноним 18/01/21 Пнд 00:51:52 1913658161
>>1913623
> матчасть
Хуясть. С точки зрения программиста на питоне это именно список, а implementation-specific детали - это не про синтаксис языка, а про его реализацию. Так можно дойти до того, что и массивов как отдельной сущности не существует, это просто несколько ячеек подряд в памяти.
Аноним 18/01/21 Пнд 01:03:23 1913665162
>>1913623
> динамический массив
Какой же ты тупой... Список в Питоне не является массивом, даже динамическим. В питоне это не динамический массив, а кастомная хэш мапа с хэш функцией, это даже не массив значений, это массив ссылок на значения, а из-за типизации питона сам масив уже начнет появляться чуть ли не на уровне интерпретатора d6. Да, где-то там на каком-то из нижних уровней это действительно динамический массив, но только после нескольких шагов нормализации, да и не может там не быть массива, даже под хэш массивами пхп в Си уже идут массивы с аллокациями, лол.

Аноним 18/01/21 Пнд 01:13:48 1913674163
image.png 23Кб, 642x195
642x195
>>1913621
>>1913611
Как там сосется, когда даже если обложился линтерами и тестами по самые яйца - твой код может в любой момент послать тебя нахуй, да и то только в рантайме на проде? Чисто ловите кайф там наверное, когда каждый пук надо дебажить через принт, чтобы ей богу все нормально работало :3
Аноним 18/01/21 Пнд 10:23:58 1913900164
>>1913438
переобуваюсь, извините
Аноним 18/01/21 Пнд 10:30:52 1913903165
memnonefmt.png 17Кб, 817x458
817x458
memfmt.png 18Кб, 818x474
818x474
Пиздец, стоило мне просто добавить fmt.Spritf(...) с одним параметром и я от пик1 перешёл в пик2. Это что за залупа? В самой программе просто гоняю байты по каналам, а с помощью spritf форматирую.
Аноним 18/01/21 Пнд 10:39:13 1913908166
>>1913674
Обоссанец, мне похуя че там в пистоне. Я на TS пишу, смекаешь?
Как сосется?
Аноним 18/01/21 Пнд 10:39:21 1913909167
>>1913903
Если форматирование простое - можешь использовать вместо этого strings.Join/Builder, если сложное - темплейты.
Аноним 18/01/21 Пнд 11:32:47 1913946168
>>1913909
Спасибо, частично проблему решило, но потом заметил что у меня горутины утекают.
Аноним 18/01/21 Пнд 11:36:34 1913951169
>>1913908
Ну тогда только пожалеть тебя могу, юродивый жс макакен с пародией на нормальный язык.
Аноним 18/01/21 Пнд 11:37:45 1913952170
>>1913903
> От пик1 в пик2

Т.е. ускорил программу? Чегоблять?
Аноним 18/01/21 Пнд 11:53:49 1913961171
>>1913952
Использование памяти с приблизительно логарифма перешло в экспоненту
Аноним 18/01/21 Пнд 12:07:18 1913972172
Screenshot20210[...].png 53Кб, 1172x332
1172x332
>>1913908
Ну, Jedem das Seine

Я лично свичнулся из TS в Go и очень доволен. Есть, конечно, в TS вещи, которые мне реально очень нравятся - например, перегрузки методов - такого никогда не будет в Go, но это нормально, что языки не похожи между собой, в этом-то и суть создания нового языка.
К слову о перегрузках в TS - они там работают не так, как в каких-нибуть крестах, где на каждый перегруз своя реализация. Нет, в TS - у тебя на уровне типов несколько сигнатур, а на уровне реализации - эта одна и та же функция. Это очень удобно, когда тебе в метод нужно передать либо один аргумент, а второй - оставить пустым, либо - наоборот. В итоге правильность вызова твоего метода проверяет компилятор и тебе не нужно отдельно внутри метода проверять, все ли правильно передали и падать, если нет.
Аноним 18/01/21 Пнд 13:37:44 1914007173
>>1913665
>В питоне это не динамический массив, а кастомная хэш мапа с хэш функцией
Чиво?) Хоть понимаешь что такое HashMap, вкатун?
Аноним 18/01/21 Пнд 14:19:29 1914040174
>>1913674
Линтерами обложился а про тайпинг забыл
как линтер что-то покажет связанное с типами если ты эти типы не указал? первый раз с динамической типизацией дело имеешь?
Аноним 18/01/21 Пнд 14:32:15 1914061175
>>1914040
Какой тайпинг? В питоне его нет, есть только аннотации, игнорируемые интерпретатором и доступные через рефлексию. Даже в пхп тайпинга больше, чем в Питоне. Под линтерами и статический анализатор понимается, если ты не в курсе. Иди пердантик подтягивай да юнит тестами обкладывайся, манька.

Мимо питонист+го боярин
Аноним 18/01/21 Пнд 21:42:14 1914572176
>>1914007
Подожди, не мешай человеку позориться.
Аноним 18/01/21 Пнд 21:49:24 1914580177
go1.PNG 41Кб, 475x862
475x862
go2.PNG 21Кб, 1098x317
1098x317
>>1905210 (OP)
Какой тонкий намёк любителям русека
Аноним 18/01/21 Пнд 21:50:44 1914583178
>>1914580
Хотя это происходит при выборе любого языка
Аноним 18/01/21 Пнд 23:09:34 1914623179
>>1914580
Ну да, учите английский, кек :3
Аноним 19/01/21 Втр 16:39:49 1915289180
>>1914580
На крайняк можно на убекче пройти.
Аноним 20/01/21 Срд 01:02:31 1915911181
Аноним 20/01/21 Срд 01:09:21 1915925182
>>1915911
Жду, когда выпустят Go 2 с полностью сломанной обратной совместимостью, чтобы все ещё сильнее охуели, чем с Python 2 и 3.
Аноним 20/01/21 Срд 01:50:27 1915944183
>>1915925
Сломанной совместимости НЕ БУ ДЕТ
Аноним 20/01/21 Срд 02:00:17 1915945184
>>1915944
Потому что не будет Go 2?))0
Аноним 20/01/21 Срд 04:14:17 1915984185
>>1915945
У нас к концу года ток 1.18 бета с дегенериками, вот там как заживём, какой Go2, НИНУЖОН!
Аноним 20/01/21 Срд 04:16:19 1915988186
>>1915911
Ээээ блять куда ты лезешь лол тебя сожрёт, что за нахуй? Норм же пакет был. Нужно почитать что там нахуевертили. Чую без Роба Пайка щас революцию устроят и весь язык перелопатят.
Аноним 20/01/21 Срд 04:18:55 1915993187
>>1915911
>>1915988
Почитал ишью. Тогда заебись, раз перенесли в более подходящий пакет методы. Сам постоянно ахуевал почему в ioutill столько хуйни разной.
Аноним 22/01/21 Птн 00:53:41 1917711188
>>1915993
>Сам постоянно ахуевал почему в ioutill столько хуйни разной.
А по тому что это сама суть helper/utill файлов/пакетов - это всегда ебаное нагромождение никак не связанной между собой хуйни, хорошо если оно хотя бы достаточно абстрактное и универсальное но зачастую - нет.
У меня на проекте тимлид если такое видит - не позволяет замержить PR, и правильно делает.
Аноним 22/01/21 Птн 18:35:12 1918244189
>>1917711
Не позволяет юзать эту встроенную либу? Хуя дикий тимлид.
Аноним 23/01/21 Суб 03:08:09 1918787190
>>1918244
Не позволяет создавать helper/util пакеты
Аноним 23/01/21 Суб 19:41:32 1919314191
Аноним 23/01/21 Суб 22:44:57 1919438192
>>1918787
С такими названиями типа?
Аноним 24/01/21 Вск 03:36:53 1919676193
>>1919438
Речь не только о названии, а вообще о идее пакета с абстрактными хелперами без какой-либо тематики
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов