Добро пожаловать в тред посвященный системному языку программирования Go! ITT мы учим этот божественный язык, кстати говоря, лучший в области многозадачности и скорости компиляции (Go так быстро компилируется, что его можно использовать как интерпретируемый ЯП!), решаем насущные проблемы и вместе отправляем патчи в дерево разработки этого потрясающего проекта!
Q: Что за проблемы решает Go и нахуй он мне всрался? A: Go решает большинство проблем C, от которого он изначально отталкивался. Ходят слухи, что инженеры в гугле просто заебались ждать компиляции своих приложений и написали Go, который сам полностью компилируется за 7 секунд. Килл-фичей Go является охуеннейший механизм многозадачности.
Q: ЯННП, так где я стану использовать это твое ебанное весло? A: В принципе, Go можно использовать везде, где ты стал бы сегодня использовать С (за исключением разных I/O штуковин вроде драйверов) и на всяком хайлоаде. В аспекте производительности Go обсирает Ruby/Python/Node в качестве бэкенда для веб-приложений.
Q: Брат, а эта шняга убьет ебанную джаву? A: Сложно сказать. Java это очень мощная технология, которая совершенствуется уже далеко не первый год, Go просто слишком молод, чтобы прямо тут и сейчас насрать на рожу Java. Но пройдет какое-то время, Go усовершенствует свой GC, поработает над разными оптимизациями... Впрочем, уже сейчас Go — это достойный соперник Java. Бенчмарки показывают, что оба языка идут достаточно плотно. Но одно можно сказать наверняка, Go не убьет джаву.
Q: Так, блять, я не понял, а классы то они когда прикрутят? A: На самом деле, классы — это лишь синтаксический сахар поверх самой концепции ООП. Философия Go лежит в том, что ты работаешь с данными "не отходя от кассы" избегая лишней возни с горой типов и наследственной архитектуры (читай: Java). На самом деле, использовать техники императивного программирования (aka C-way) и работать с сырыми данными — охуеннее, чем может показаться на первый взгляд.
Q: Так, а он вообще много умеет, этот твой Go? A: Не смотря на малый возраст этого ЯП, он обладает обширной стандартной библиотекой — http://golang.org/pkg/. Криптография, модули для работы с файловой системой, HTTP, JSON, базы данных, криптография, архивация и многое другое. За последние несколько лет сообщество сильно окрепло и появилась хуева туча 3rdparty модулей для Go. Как только ты разберешься с development workflow, то поймешь, что установка любого из них выполняется одной командой ;)
Q: Хорошо, а с чего начинать? A: Трепетно разберись с разделами отсюда http://golang.org/doc/ и когда ты будешь готов писать Go код, то обратись к этому ресурсу: https://gobyexample.com/. Если у тебя будут возникать такие вопросы, в которых StackOverflow тебе не поможет, можешь смело обращаться к нам!
>>473023 >Android native development added, albeit still "under heavy development" Теоретически, запустить на андроиде helloworld ты сможешь, но до полноценного приложения Go еще очень далеко. Но я думаю, что Java так плотно заняла позиции, даже вытеснив NDK, что у Go мало потенциала в этом плане для бизнеса.
Хотя в любом случае, это будет охуенно. Будет, но не сейчас.
>>473109 Я тут фор фан пишу реализацию протокола bittorrent на го. Допилю минимальный функционал (скачивание однофайлового торрента) и выложу на гитхаб. Если получится - сегодня, если нет - на неделе. Никто не желает присоединиться? Сразу предупреждаю, там дикое говнокодие.
>>473113 Пайк в каком-то интервью говорил, что цель была - создать язык, который даже гуглоиндусы поймут, лол. Хотя, в этом нет ничего плохого, на самом деле. Я гуманитарий, программирующий в качестве хобби, и для меня го оказался отличным выбором.
>>473113 Кстати говоря, используют. Но очень неторопливо. Не забывай, что это новая технология, а у них серьезный бизнес, к которому новая технология просто не может быть готова.
>>473114 Я могу устроить тебе code review и поискать какие-то явные баги, но времени очень мало, чтобы вплотную заниматься. Ты перед тем, как на гитхаб заливать, на всякий случай, прогони еще разок.
>>473120 >Ты перед тем, как на гитхаб заливать, на всякий случай, прогони еще разок. Окей. Как все сделаю и выложу - отпишусь в этом итт. Надеюсь, он не заглохнет как предыдущие го-треды.
>>473189 Проблема в том, что generics — это хуета, которая убивает compile-time. Я знаю, что Go Team уже давно работает над решением проблемы и поверь, в Go 2 уже будет аналог к generics.
А костыли — да, приходится писать. Хотя я считаю, что проблема надумана.
Слышьте, хомяки, а расскажите мне про го-мобайл. Я знаю что пайк пидор не фанат мобилок и говорил что го вообще не под них, но вот уже давно начали пилить поддержку андроида. Давно. Хуле так давно, хуле так долго? Не могут запилить поддержку в собственную платформу? Когда я смогу делать крузисы на го для своего китаефона?
А еще меня бесит шо private/public решается по заглавной букве. hui - private, Hui - public. Это ОЧЕ не удобно.
>>473014 > На самом деле, использовать техники императивного программирования (aka C-way) и работать с сырыми данными — охуеннее, чем может показаться на первый взгляд Аутотренинг
>>473014 >Q: Что за проблемы решает Go и нахуй он мне всрался? >A: Go решает большинство проблем C, от которого он изначально отталкивался. Ходят слухи, что инженеры в гугле просто заебались ждать компиляции своих приложений и написали Go, который сам полностью компилируется за 7 секунд. Килл-фичей Go является охуеннейший механизм многозадачности.
Блять, основные сферы применения си: ос, драйвера, всякий эмбеддед, реал тайм и прочее, го вообще не годится на замену си, ибо не может в предсказуемость и имеет сборщик мусора. Го всегда позиционировался как убийца жабы, какому дебилу пришло в голову его с сишкой сравнивать
>Q: ЯННП, так где я стану использовать это твое ебанное весло? >A: В принципе, Go можно использовать везде, где ты стал бы сегодня использовать С (за исключением разных I/O штуковин вроде драйверов) и на всяком хайлоаде. В аспекте производительности Go обсирает Ruby/Python/Node в качестве бэкенда для веб-приложений.
>С (за исключением разных I/O штуковин вроде драйверов)
>>473262 Но ведь ты просто Java-петушок, который пришел в мир программирования в году эдак 2012. Ты не знаешь, какие есть приемущества у императивных языков (вроде Pascal) и не знаешь ничего о недостатках ООП.
Для тебя ООП — это религия, в которую ты свято веришь. Хотя тебя не ебет, что сотни типов (классов/интерфейсов/whatever) превращают любое приложение в абстрактное спагетти, не имеющего ничего общего с логикой.
>>473014 >Go решает большинство проблем C, от которого он изначально отталкивался. Каких проблем? Типы, структурки и обработка ошибок в го ровно такая же, как и в сишке. Ну разве что "void *" теперь "interface {}". >Килл-фичей Go является охуеннейший механизм многозадачности. От переименования тасков-корутин в горутины килерфичей они не стали. >Бенчмарки показывают, что оба языка идут достаточно плотно. Ну то есть go - веб скейл, прямо как монга? >На самом деле, классы — это лишь синтаксический сахар кок кок НИНУЖНО. Все что есть в го это лишь синтаксический сахар над восемью операторами из брейнфака и int 0x80.
>>473191 > аналог к generics. это чо костыли для говна за сотню?
ну чо долбаёбы завезли вам эксэпшоны? генерики? как там может ваша сцанина в распределённость? чо затихли сучары? судя по багтрекеру го используют либо конченые кретины либо наследственные дибилы.
>>473453 Смотрите ка, жава-даун на связи. Без эксершинов уже не представляешь жизни? Пральна, это ж так охуенно когда вместо адекватной обработки ошибки мы делаем throw Error и если не завернуть в трай тогда всё распидарасит. Дженерики и го? Обсуждалось ещё мамонтами, вполне комфмортно писать и без них, просто нужно подключить мозг и подумать, но явадебилу это не дано. Что не так с распрелелённостью? И при чем тут язык вообще? Или ты эрлангодрочер с килерфичей ПОООК ИСКАРОПКИ! А то, что эрлангу надо фермы, там где справиться один сервер это НИВАЖНА!! >>473455 Просто вы как гомофобы боитесь принять что-то новое. А тем временем Го продолжает свой путь по ИТ миру потихоньку создавая вакансии даже в СНГ.
>>473475 Вот этого слушайте, мужик правильные вещи говорит. Go — это сборная солянка правильных паттернов для системного программирования. Впрочем, как и Rust. Но эти два языка несколько из разных опер.
>>473480 > правильных паттернов для системного программирования пок пок так нильзя, надо так, потому что гугель умный. да пошел ты нахуй, гугель, сраный язык будет меня еще ограничивать считая за полного дауна.
>>473475 >это ж так охуенно когда вместо адекватной обработки ошибки мы делаем throw Error и если не завернуть в трай тогда всё распидарасит то ли дело вручную протаскивать все эксепшоны наверх с помощью if err != null { return err; } каждой второй строчкой. вот уж вершина софтваре дизайна. в жабе вон есть чекед эксепшоны, которые надо обязательно либо обработать либо передать наверх через throws YobaException, хорошо о них никто еще не отзывался. да что там, гобляди сами осознали ущербность концепта, сделали свой паник-рековер который строки бросает, прям как в гвидоне 1.5. глядишь скоро сделают класс Exception и дойдут до уровня 2.6! >вполне комфмортно писать и без них да, писать везде interface {} а потом делать рантайм-свитч по типам и в каждой ветке один и тот же код - невероятно комфортно. впрочем, что тебе комфортно уже яснопонятно, если для тебя ручная обработка ошибок верх удобства. >Что не так с распрелелённостью? что это обычное кооперативное говно, которое переименовали в "горутины", все и обосрались как будто это пиздец какое-то новшество. вам акторы показать, так наверное штаны от счастья обоссыте. >Или ты эрлангодрочер с килерфичей ПОООК ИСКАРОПКИ! это гобляди как раз так кукарекают. >А тем временем Го продолжает свой путь по ИТ миру потихоньку создавая вакансии даже в СНГ. больше хубр читай, там и не такой бред пишут.
>>473508 что не так с логикой? (_:даун => _:использует го) => (я:не использую го => я:не даун) или ты конструктивист ебучий, отрицаешь правило исключенного третьего? соси мой first-order predicate хуй тогда.
>>473506 Ну давай по-порядку. Во-первых, ты хуй. Во-вторых, давай пройдемся по твоему пустому пиздежу:
>ты хотел сказать копипастить, а потом проходить и заменять типы))) За два года разработки веб-апплета на Go я только пару раз попал в такую передрягу и оба раза из-за своей же глупости в неправильной постройке архитектуры.
>мозг из мастера тащить, лол Это смешная шутка про то, что некоторые 3rd-party пакеты порой ломаются из-за рукожопости мейнтейнеров?
>иё нету) Не хочу тебя расстраивать, но distributed системы строят на Go уже не первый год и вроде как неплохо получается!
>мда, кажетца ты долбаёб, а если сервер упадёт? А он и не говорил, что нужен только один сервер. Товарищ говорил, что там где справляются с задачей десять серверов на Erlang, хватает одного на Go.
>правильный патер это типа ГЦ))) проиграл с дауна, иди уроки зделай системный програмист GC это достаточно рабочий паттерн, который хорошо cебя показал. Да, это оверхед над malloc'ами из С (которые ты, мой дорогой школопогромист не использовал в своей жизни ни разу, ведь родился в эпоху, когда есть такая вещь, как Node), но за все нужно платить. У Java тоже вот есть сборщик мусора, но ничего, язык живет-процветает.
Советую тебе пойти немного все-таки разобраться в индустрии, набраться опыта хотя бы лет 5-10, а потом возвращаться.
>>473517 Ты сказал, что дауны используют Go, но не сказал что все дауны используют Go. Твое следствие гласит, что ты не можешь быть дауном, ведь не используешь Go. Хочу отметить, что следствие неверно, ведь подкреплено неверным исходным высказыванием. То, что существуют дауны, которые используют Go, вовсе не гарантирует, что Go используют только дауны, а значит, твоя принадлежность к множеству даунов не определена.
>>473521 >За два года разработки веб-апплета на Go коков даун, я за это время на джабе уже 3 проекта зделал.
>Это смешная шутка про то, что некоторые 3rd-party ага)
>Товарищ говорил, что там где справляются с задачей десять серверов на Erlang, хватает одного на Go. ))))))))))))))))))))))))))))))))))))))))))))))))))))0000000000000000000
>GC это достаточно рабочий паттерн, который хорошо cебя показал. >паттерн джаваблядь не палитца
>это оверхед над malloc'ами из С лол
>У Java тоже вот есть сборщик мусора, но ничего, язык живет-процветает. ну так джаву же тут никто не записывал в системные языки
>Советую тебе пойти немного все-таки разобраться в индустрии, набраться опыта хотя бы лет 5-10, а потом возвращаться. прикрати уже животик болит))
>>473521 divan0, ты? Олсо как и предупреждал тред утонет в срачах и говне, прямо как треды о люмии в свое время в /app. Хотя энто тоже хорошо, значит на язык не пофиг как на D к примеру
>>473512 > исключения Джава-макаки не могут в монадическую обработку ошибок, и в понимание различий между ошибками и исключениями также не могут. > акторы Каналы появились позднее акторов.
>>473512 >то ли дело вручную протаскивать все эксепшоны наверх с помощью if err != null { return err; } каждой второй строчкой Этого делать не надо. Хорошо спроектированная архитектура позволяет уменьшить число "протаскиваний" до двух. >гобляди сами осознали ущербность концепта, сделали свой паник-рековер который строки бросает Это действительно очень крутой концепт, но даже в доках написано, что использовать его надо только в UNEXPECTED случаех, когда что-то идет YOBA так непонятно, что пиздец. Например, когда ты заведомо даешь какой-то библиотеке неправильные данные. Panic-recover куда лучше справляется с этой проблемой, чем try-catch. >что это обычное кооперативное говно, которое переименовали в "горутины" Горутины сами по себе представляют самый удобный способ объявить concurrent задачу, среди всех языков программирования сегодня (особенно, если сравнивать с Java). Но настоящая сила Go проявяется тогда, когда ты начинаешь использовать горутины вместе с каналами и select-ами. >больше хубр читай, там и не такой бред пишут. Я тебе так скажу. Я скорее послушаю профильного специалиста с хабра, чем школьника с двача, который не разобравшись толком в сабже, не имея даже пяти лет опыта ни на одном стеке, уже кукарекает в Go-треде, что Go — нинужин :)
>>473529 >Джава-макаки не могут в монадическую обработку ошибок так ты сегодня у мамки гоблядь или все-таки хаскелист? >Каналы появились позднее акторов "каналы" твои это обычные блокирующие очереди. им дохуиллион лет уже.
>>473529 >Джава-макаки не могут в монадическую обработку ошибок ой сьебал бы уже со своими майби и прочим говном, прочитал рилворлд хрескель и рассажевался
>>473536 > так ты сегодня у мамки гоблядь или все-таки хаскелист? В этом треде есть не только ты и гобляди. > "каналы" твои это обычные блокирующие очереди. им дохуиллион лет уже А CSP появился в 78, его сочетание с каналами началось с http://en.wikipedia.org/wiki/Newsqueak
>>473535 >Хорошо спроектированная архитектура позволяет уменьшить число "протаскиваний" до двух. написать все в три функции и при этом понасоздавать структур с полем "lastError" которое все методы в самом начале проверяют это не хорошо спроектированная архитектура. >Panic-recover куда лучше справляется с этой проблемой, чем try-catch. это одно и то же, долбоебина. ну кроме того что panic ограничивает количество типов исключений до ровно одного. а defer это обычный finally. >Горутины сами по себе представляют самый удобный способ объявить concurrent задачу клоун, я тебе еще раз говорю, это обычные корутины. смотри, та же хуйня на гвидоне: http://ideone.com/UgvUeT >Но настоящая сила Go проявяется тогда, когда ты начинаешь использовать горутины вместе с каналами ого, ебать, каналы! вот это мощь! https://docs.python.org/3/library/asyncio-queue.html >select-ами ну нихуя себе, можно ждать на нескольких каналах одновременно! https://docs.python.org/3/library/asyncio-task.html#asyncio.wait >Я скорее послушаю профильного специалиста с хабра >специалиста >с хабра ))))))))))))))))))))))000
Как несложно догадаться по топику сегодня мы будем говорить о новом, модном, молодёжном говне языке go. Для начала факты:
1. Я не знаю чем думала копчёная индусская обезьяна которая называла язык "go". Очевидную проблему решили костылями - можно кое-как искать по "golang". Созададим трудности и героически их преодолеем.
2. У многих хороших девелоперов код на го вызывает стойкое отвращение. Меня вот например так тошнило только от перла. Индусня, ЧСХ, довольна. Это, ящетаю, заявка на победу.
3. Язык и все окружающие его либы находятся в статусе преальфа. Ну вот ошибки в стандартных либах класса "тихо игноируем хттп ошибку полученную от сервера", такое.
4. Хипстота на хипстоте и хипстотой погоняет. Ну вот например import "github.com/vlastelin/analpleasures". Да, только мастер, только хардкор. Из этого имеем простое следствие - если кто то достаточно туп что бы использовать это поделие в продакшне, то либы он будет импортить именно так. Это, очевидно, приводит к народным хипсторским забавам вида "8 часов судорожно ищем как именно был собран предыдущий билд который вроде как работал".
А теперь плохие новости - это вот говно было сделано гугелем что бы его тупая индусня высококвалифицированные сотрудники могли писать хоть какой то код в современных реалиях (ну - 100500 ядер на процессоре, всё вот это). Такой вот новый петон. Следовательно это говно будет расползаться везде и избежать встречи с ним вы не сможете.
>>473544 Болезненный, объясни зачем ты кидаешь ссылки на батарейки питона и пытаешься доказать, что всё это было в жава и даже Алах? Го != новые фичи Го это удобная сборка из лучших практик из разных языков которок собрано вместе о оптимизировано для удобной работы тоже вместе. Как говорится: тебе шашечки или ехать?
>>473556 >пытаешься доказать, что всё это было в жава не поверишь, я тут не один. >Го это удобная сборка из лучших практик из разных языков >лучших практик >обработка ошибок и система типов как в си >иксепшоны как в гвидоне 1.5 ясно. >>473557 и чем это лучше? вспомнил модную ссылку с хубра?
>>473553 >1. Я не знаю чем думала копчёная индусская обезьяна которая называла язык "go". Очевидную проблему решили костылями - можно кое-как искать по "golang". Созададим трудности и героически их преодолеем. Пиздец, это конечно же фундаментальная ахилесова пята языка. Problem #1. Ужас! >2. У многих хороших девелоперов код на го вызывает стойкое отвращение. Меня вот например так тошнило только от перла. Индусня, ЧСХ, довольна. Это, ящетаю, заявка на победу. На заметку, "кококо ооп паттерны кококо архитектуры жаба жаба" это не хорошие девелоперы. Хорошие девелоперы с достойным стажем уважают императивные языки и видят их приемущества. Код на Go максимально минималистичен, построен вокруг логики и pure data. >3. Язык и все окружающие его либы находятся в статусе преальфа. Ну вот ошибки в стандартных либах класса "тихо игноируем хттп ошибку полученную от сервера", такое. Обвиняет технологию, которой на тот момент было три-четыре года в том, что стандартная библиотека содержит баги. Просто смешно. Джава первые десять лет вообще была падающим ежеминутно куском говна. >4. Хипстота на хипстоте и хипстотой погоняет. Ну вот например import "github.com/vlastelin/analpleasures". Да, только мастер, только хардкор. Мужик не слышал про то, что fetch'ить пакеты можно по тегам релизов ;) >А теперь плохие новости - это вот говно было сделано гугелем что бы его тупая индусня высококвалифицированные сотрудники могли писать хоть какой то код в современных реалиях Ну или чтобы строить производительные бэкенд-приложения с прозрачной логикой и нереально высокой скоростью компиляции.
Такс такс такс, что тут у нас. Ахаха, да это же святой воен %НУЖНЫЙ_ЯЗЫК%. Ну наканецта. Он вам втирает свою правду, ебучий софист. Кто ведется на это - ебучий дважды. Правда, как известно давно, у каждого своя. Кукарекать на всю деревню, рвать на себе майку и доказывать, что его правда самая праведная - черта типичного анального раба какого-то языка. Э, а ты любишь фастфуды? Какие-нибудь макдаки? Уверен, что любишь. Такие, как ты, все любят. Но почему же ты не кричишь на весь мир, что в еде сего производства очень много холестерина и мы все сдохнем раньше времени, если будем жрать это говно? Наверное не удобная тема, потому что ты уже заведомо знаешь, что всем похуй. На тебя и на холестерин. Все будут жрать, пока ты делаешь свои пок-пок. Поэтому ты сливаешься с ними, ты не можешь спорить и отстаивать свою точку зрения. А тут ты пытаешься донести свои доводы. Нашел минус - вбросил. А другие смотрят на тебя и думают, мол, иксперт. Хуйня это все, я тебе скажу. Всем похуй на то, что ты тут написал. Всем похуй на то, что я сейчас пишу. Если мы выбираем идеальный язык, то почему все пишут на чем-то ином, нежели на Tcl? Он идеален, здесь спору быть не может, но большинство пишет на бидоне, рубане и прочем. Окстись, быдло прыщавое, Go - язык достойный. Чего достоин ты? По-моему ты софист обыкновенный. Пишешь какую-то абстрактную херню, заставляешь верить. Оставь свои приемчики для своих одноклассников, тут сидят многоуважаемые сеньеры и сеньериты.
Я кажется понял, что происходит итт. В тред набежали жаба-питухи, которые не способны видеть императивный код, ввиду того, что не могут прожить без цепочки в двадцать восемь интерфейсов и двумя строчками логики приложения. Императивщину эти ребята не понимают, ну и хуй с ним!
Потом какой-то пацан начал доказывать нам, господам, что рутины/каналы были задолго до Go и вообще нам впаривают хуету. Пацана не волнует, что Go это первый язык, в котором это реализовано, как часть непосредственно синтаксиса, а не костыль вроде разношерстных ранлупов и моего любимого JThread.
Еще веселят питухи, которые не могут отличить unexpected ошибку (паника) от ожидаемой ошибки (которую вовсе не обязательно передавать вверх по стеку, а можно просто грамотно обработать in place).
Короче говоря, /pr/ во всей красе. С пеной во рту доказывать, что $langname лучше, чем Go, потому что в нем это реализуется проще или с костылем вроде класса для поддержки потока ;)
>>473386 > Но ведь ты просто Java-петушок, который пришел в мир программирования в году эдак 2012. Ты не знаешь, какие есть приемущества у императивных языков (вроде Pascal) и не знаешь ничего о недостатках ООП. Какие же есть преимущества у императивного говна из 70-ых?
> Для тебя ООП — это религия, в которую ты свято веришь. Хотя тебя не ебет, что сотни типов (классов/интерфейсов/whatever) превращают любое приложение в абстрактное спагетти, не имеющего ничего общего с логикой. Тогда давай делать всё на ассемблере, абстракции не нужны.
>>473604 > Императивщину эти ребята не понимают, ну и хуй с ним! ты ешчё не родился когда я уже на фортране хуярил
>Пацана не волнует, что Go это первый язык, в котором это реализовано, как часть непосредственно синтаксиса, а не костыль вроде разношерстных ранлупов и моего любимого JThread. сначала годаун пишет что это в эрланге встроено и часть языка и поэтому хуёва, тут пишет про го, и это круто. совпадение? не думаю. ты мудак за ноль тебе уже 10 примеров где показано суть горотутин лол. тут ты ещё можеш расписать как работает планировшчик в го, и как это будет мапитца на реальные треды, так же не забудь добавить про работу с сетью, сериализации и вот это всё-всё-всё.
>Еще веселят питухи, которые не могут отличить unexpected ошибку (паника) от ожидаемой ошибки (которую вовсе не обязательно передавать вверх по стеку, а можно просто грамотно обработать in place). ну и как ты её обработаешь, а мудачёк? пробросишь вверх? вернёшь -1? что там за костыль давай уже реальный код, от тебя только кукареканья пока слышны.
> С пеной во рту доказывать, что $langname лучше, чем Go, сейчас реально не осталось промышленных языков которые хуже го. го это языковое дно.
>>473630 >ты ешчё не родился когда я уже на фортране хуярил CAUTION! Oldfag in the thread! >ты ещё можеш расписать как работает планировшчик в го, и как это будет мапитца на реальные треды могу! >пробросишь вверх? вернёшь -1? Нет, я просто выстраиваю приложения так, что если где-то и ожидается ашипка, то она тут же отрабатывается и не приводит к завершению работы программы. >го это языковое дно Точно ниже Go лежат такие языки, как JavaScript, Ruby, PHP и мой любимый D :3
>Нет, я просто выстраиваю приложения так, что если где-то и ожидается ашипка, то она тут же отрабатывается и не приводит к завершению работы программы. код давай полуёбок
>Точно ниже Go лежат такие языки, как JavaScript, Ruby, PHP и мой любимый D :3 ага, в твоём манямирке.
>>473635 > я просто передаю вверх по стеку -1 как в сишке, рожая тонны ненужного кода или обсираясь, забыв освободить ресурсы Починил. > мой любимый D Вот грусть-то, в D непопердолить как даун по два года над одной хуйней, ведь там есть обработка исключений. А еще он работает слишком в 1.5 раза быстрее.
>>473638 Давай завтра, я уже спать потопал. >>473642 >> я просто передаю вверх по стеку -1 как в сишке, рожая тонны ненужного кода или обсираясь, забыв освободить ресурсы У Go есть божественный GC, а defer выполняется даже после паники :) >2015 >D >TOP KEK
>>473644 > божественный GC > stop-the-world non-generational говнище как и в D okay.jpg > defer выполняется даже после паники Ладно, но -1 то ты все равно пасуешь как даун туда сюда? Код давай, вангую пиздец. > 2015 > D > TOP KEK Что сказать-то хотел, м?
>>473741 > N-M шедулера Пиздец, в го любую элементарную хуйню называют умными словами, чтобы покруче звучало и ньюфаги охуевали? Инновации, блять, в сисярпе tpl уже лет 5 как есть. Я молчу, про то, что ваши уебские channels тормозят как пиздец, в отличие от простейших разворачивающихся в стейт-машину yield в сисярпе, а божественных async/await фьчеров лучше которых пока ничего не придумали так вообще нет и не будет.
>>473787 Sooqa, сейчас Go 1.5 выйдет со своим новым охуенным concurrent GC и жаба начнет сосать еще сильнее. Что ты хочешь от языка, которому пять лет? Работает отлично, решения интересные и рабочие, все ок. Тупое ты животное, ну и что, что в С# есть yield? Кстати, пидарок, с какого хуя channels тормозят и кто сказал, что async-фьючеры — это the way to go. Петух, у тебя будут адекватные претензии непосредственно к языку?
>>473855 на самом деле манька просто обосрался со своим сисярпом и жабой, не может смириться с фактом, что в го писать многопоточные приложения проще и стильнее, не обращай на него внимания
К тому же нода сама по себе — это обосранный рантайм. Вся моща нодны кроется за V8 и ее предшественником JSC. Поверь, что первый, что тем более, последний, разрабатывались кудаааа дольше пяти лет.
>>473873 >https://groups.google.com/forum/#!topic/golang-nuts/ec9G0MGjn48 Тебя не смущает, что этому треду уже 4 ебанных года и с тех пор язык вырос в семь раз? >Потому что их делают даже годауны Кто-то делает так и что? Мне по этому поводу теперь всраться? >Если бы это дерьмо не пропихивал гуголь, оно бы умерло в зачаточном состоянии implying что жабу никто не проталкивал, ой лол
>>473880 >дает сылку на сферический бенчмарк в вакууме, который сходится с реальностью чуть менее, чем никак Блять, ну я даже не знаю.
Ты, мудак, собрался на окамле или лиспе писать? Или может на этом дерме, которое если бы не пропихивал оракл, оно бы умрело еще в зачаточном состоянии?
>>473889 >implying что любая корпорация — зло и нельзя делить их на свои-чужие >implying что стратегия гугла не в том, чтобы ссать тебе в ротешник, а чтобы делать твою жизнь лучше и впаривать тебе рекламу
>>473883 > язык вырос в семь раз? На дерьмовом фундаменте ничего нормального вырасти не может. Можно сколько угодно усираться с GC, каналами, interface{}, оно все равно работать не будет. GC исследуют 50 лет и он до сих пор говно. Со скоростью работы js сколько ебутся?
>>473884 Ты по ссылке-то прошел, мудень? Там выше тащемта кресты, раст, д и прочее.
> этом дерме, которое если бы не пропихивал оракл, оно бы умрело еще в зачаточном состоянии? Кто пропихивает д, м? Тем не менее даже он не такое дерьмище как го и на гитхабе у него всего в 1.5 раза меньше кода.
>>473900 > просто очередной бенчмарк, расслабься Маняоправдания, как обычно. > implying что объем кода хоть как-то отражает качество непосредственно языка :) Что-то не вижу melbolge в списке.
>>473903 Тоесть ты серьезно считаешь, что бенчмарки отражают эффективность языков in-the-wild? И ты настолько ебанутый мальчик-максималист, что твой контр-аргумент — это ебанный Melbolge?
>>473905 >in-the-wild Давай, в чем отличие твоего модного словечка от нормально составленного бенчмарка? Я слушаю. >мальчик-максималист Кто из нас максималист, тот кто считает что на популярность языка влияют в том числе его удобство и скорость работы, или всё-таки даун, которому рекламой проссали уши?
>>473014 Язык для аутистов, неспособных в абстракции, пиздец, я после C++, Java и Scala что в каменный век попал, где были поклонники этого языка последние 15 лет?
>>474550 Есть АОП, функциональное программирование, метапрограммирование, DSL и прочие абстракции, разработанные за последние 40 лет развития CS, которые позволяют решать задачи, а не ебаться с байтиками.
Первые 2 книги не про ООП, клоун.
>>474552 Я умею использовать инструменты по назначению.
вкотился и обосцал всех годаунов, которые кукарекают на ооп, и они такие типа тру-императившчики, лел. тру императившчина это фортран, где пацаны живут гоуту и глобальным стэйтом, а не где есть структурочки, которые первый шаг к ооп, а то что там нету класов\объектов говорит лишь о том что создатели языка дауны)))) как и те кто его использует. могу вам это в лицо сказать полуёбы)
>>474765 Это структуры с функциями, которые были в том же Си с незапамятных времен, и никоим образом это дело к ООП отношения не имеет, как бы не маневрировали на эту тему отдельные одаренные личности.
>>474784 > и никоим образом это дело к ООП отношения не имеет Как и вещи вроде Java или C++: > Actually I made up the term "object-oriented", and I can tell you I did not have C++ in mind.
>>474932 Ну, раз какой-то маня высрал статейку мол ООП мертво, то так оно и есть. Могу тебе скинуть недавнюю новость о том, что интернет умрёт через 8 лет, она кстати авторитетнее, потому что от имени универа крупного.
>>474932 >I can tell you I did not have C++ in mind Ага, потому что он имел в виду Smalltalk, что не делает C++ / Java / Scala менее ООП: у нас есть объекты, которые описываются классами, хранящие свое состояние и взаимодействующие с другими объектами при помощи "сообщений" - методов.
ООП не умирает, а видоизменяется, именно этот процесс описывается по твоей ссылке.
>>474765 > Или вот еще — когда для каких-то особых случаев людям советуют использовать reflect или interface{} с кастингом — они начинают рассказывать про «это медленно» и вообще, мы > хоть это за zero costs получить. Блин, конечно медленно — а в в других языках, generics, думаете бесплатно получается?
Топкек, и это - язык системного программирования? Криво, так давайте еще и медленно, лел.
>>475000 Я не знаю в каком манямирке живешь ты и автор той статьи, но на этом вашем наследовании, не пытаясь совать его туда, где надо использовать композицию, построены просто охуительные тонны хорошо задизайненного простого и понятного кода. В вашей говей гоебле с рефлект и интерфасе я честно говоря не разбирался, потому что ее тупо читать невозможно, но ко-ко-ко классы-наследование-полиморфизм умирло это пиздец тупо.
>>475005 Ну давай разберём тобой написанное: > у нас есть объекты данные, которые описываются классамитипами, хранящие свое состояние и взаимодействующие с другими объектамиданными при помощи "сообщений" - методоввызовов функций. Да, фортран это ОО-язык.
>>475031 >объекты, которые описываются классами, хранящие свое состояние и взаимодействующие с другими объектами при помощи "сообщений" - методов Что тебе непонятно здесь?
— на практике модель из Ява/си++ оказалась очень практичной и позволила решить проблемы роста сложности кода — абстракция «объекты посылают сообщения» на практике не нужна (сообщения нужны там где есть асинхронность или параллельности. Блокирующий однопоточный вызов метода это пародия на передачу сообщения) — набор типов + функций для работы с ними это не ООП и приведет к тем проблемам с которыми ООП борется: превращение кода в кашу из кучи функций. разработчики Го хотят казаться модными и оригинальными но они делают шаг назад, а не вперед. Аналогично кстати мне не нравится отказ от исключений в расте так как он просто возвращает нам назад проблемы которые побеждаются исключениями и которые мы видели в 80-х.
>>475032 Чем объекты отличаются от прочих данных? подсказка: ничем Чем классы отличаются от типов? ничем Чем методы отличаются от функций? ничсинтаксисом
Кто не верит мне, посмотрите на яваскрипт. Хипстеры из 90-х тоже не любили ООП из явы, решили проявить оригинальность и отказаться от классов. Как итог, мы умеем почти в каждой библиотеке или фреймворке имитацию классов и их же имеем в ES6. Это же надо быть такими упоротыми хейтерами ООП.
Объект объединяет (инкапусулирует) данные и методы для работы с ними.
> Чем классы отличаются от типов? Класс это более солидная вещь чем обычный тип языка вроде Си так как там ест методы, интерфейсы, наследование и тд, а у типа нету. Тип это просто «гпупая» структура с данными.
> Чем методы отличаются от функций? Тем что вызываются на объекте очевидно.
Вообще ответить можно было короче: инкапсуляция, полиморфизм, наследование.
Питушки, друзья-двачеры, такое дело. Вы заблуждаетесь, в Go есть самое настоящее ООП. Просто ООП, которое используется в Go несколько более гибкое, чем привычная для С++ хуита с vtable и тонны классов. Для джаводауна может и привычно делать для элементарной логики (10 строчек кода) два-три класса, но это превращает код в посмешище...
>>475045 > Объект объединяет (инкапусулирует) данные и методы для работы с ними. Это вопрос синтаксиса, а не принципиальных отличий. Можно инкапсулировать на уровне класса, можно — на уровне неймспейса или модуля. > Класс это более солидная вещь чем обычный тип языка вроде Си так как там ест методы, интерфейсы интерфейсы Можно обобщить для любого типа. > наследование Наконец-то что-то по существу! Но > inb4: умирающий полиморфизм подтипов > Тем что вызываются на объекте очевидно. Опять же, чисто синтаксическое различие. Единственное «но» — таблица виртуальных методов, которая встречается в двух случаях: при полиморфизме подтипов (который, опять же, умирает), или у интерфейсов или типажей (которые применимы к любому типу).
>>475039 Объект - сложный тип данных, позволяющий абстрагироваться от байтиков и работать с состоянием.
Классы описывают как состояния, которые в которых может находиться объект, так и его поведение.
Методы характеризуют поведение объекта, в ООП коде у тебя взаимодействуют между собой при помощи сообщений абстракции, а в твоем процедурном непотребстве просто отрабатывают функции.
> What kind of language idiomatically involves casting to the top type? That would be like if Java idiomatically involved casting to Object, or C++ idiomatically involved casting to void*, just to get any sort of genericism. Look at almost any big Go project; the abundance of {}interface typed variables is alarming
Оно еще и небось в рантайме падает, если низя кастануть интерфейс в то, что надо. Охуительная система типов, просто охуительная.
ООП это не синтаксический сахар позволяющий писать вызовы в цепочку, это именно отдельная концепция.
> Можно инкапсулировать на уровне класса, можно — на уровне неймспейса или модуля. Можно но это будет уже другое. Модули дают инкапсуляцию, но без наследования или полиморфизма как я понимаю.
>> Класс это более солидная вещь чем обычный тип языка вроде Си так как там ест методы, интерфейсы интерфейсы > Можно обобщить для любого типа. Не понял. У типов в Си нет того же, что есть у классов в Яве значит это разные вещи.
> таблица виртуальных методов Ты скатываешься к деталям реализации, это не важно как оно реализовано внутри.
> или у интерфейсов У интерфейсов нет виртуальных методов, как я понимаю, они нужны только на этапе компиляции для проверки правильности кода.
В общем, я пока не вижу особой выгоды от всяких альтернатив ООП, если они что-то полезное придумают, это хорошо, но пока мне видится что никто не поймет их концепций и у нас просто будет куча структрур и куча функций для работы с ними без всякой инкапсуляции, обычный процедурный бардак.
> умирающий полиморфизм подтипов у нас есть еще полиморфизм на интерфейсах и по моему вместе с подтипами они покрывают все встречающиеся на практике ситуации. По крайней мере по моим ощущениям.
состояние это все же лишняя асбтракция. Вот допустим у тебя внутри одного класса есть объект другого класса:
class A { int a1 = 0; public B; }
Поля класса B это часть состояния класса A или нет? А если один объект класса B входит в несколько разных объектов класса A то это что? разделяемое состояние?
Мне кажется эти состояние/поведение это лишняя абстракция не добавляющая ценности и лучше просто говорить поля/методы.
Как я понимаю кастование к void/Object нужно в языках где нет генериков и нельзя написать например Collection<SomeClass>. Там где можно кастовать к Object нет необходимости и все проверяется при компиляции. Поправьте кто лучше меня знает.
Вообще эта утиная типизация с проверкой на имена полей/функций мне не нравится. То что в каком-то объекте есть поля например a и b (пусть даже подходящего типа) еще не значит что он подходит этой функции. Интерфейсы из Java все же содержат в себе больше смысловой нагрузки. Ну и плюс в Яве мы можем делать интерфейсы без методов просто для обозначения какой-то способности/характеристики.
>>475061 > Модули дают инкапсуляцию, но без наследования или полиморфизма как я понимаю. Есть несколько типов наследования: специальный полиморфизм (интерфейсы, типажи, примеси, etc), полиморфизм подтипов aka наследование, и параметрический полиморфизм aka дженерики. Из них только полиморфизм подтипов завязан на классы. > Не понял. У типов в Си нет того же, что есть у классов в Яве значит это разные вещи. Забавный факт: есть языки кроме С или джавы. Например, в расте типажи можно реализовывать для любого типа, аналогично с классами типов в хаскеле. > Ты скатываешься к деталям реализации, это не важно как оно реализовано внутри. Вообще-то, это довольно важная деталь реализации > У интерфейсов нет виртуальных методов, как я понимаю, они нужны только на этапе компиляции для проверки правильности кода. Есть. Без параметризации компилятор не знает, какой именно тип скрывается за интерфейсом, и для динамической диспетчеризации используется таблица виртуальных методов. В расте это сделано несколько более явным: http://huonw.github.io/blog/2015/01/peeking-inside-trait-objects/ > у нас есть еще полиморфизм на интерфейсах и по моему вместе с подтипами они покрывают все встречающиеся на практике ситуации Есть тенденция использовать типажи/примеси вместо наследования. А «ООП без наследования» по своей сути ничем не отличается от «не-ООП» с развитой системой типов.
Вообще что спорить об абстрактных вещах? у меня тут под рукой есть пример веб-приложения на Go, работающего с базой данных, по меркам веб-приложений оно крошечное, но как пример мне кажется подойдет:
>>475071 >загрязняется ифами А по-моему, наоборот, лучше, чем гадать где поймал-непоймал и оборачивать вызовы в try-catch. Panic-defer-recovery так вообще гениальный концепт, но это мое мнение.
>>475071 > Я не вижу там никакой инкапсуляции. Забавный код. Приватные функции — вижу. Приватные поля в структурах — не вижу. > Вот пример показывающий как код загрязняется ифами при остутствии исключений Ну так макросы не завезли, развитую систему типов — тоже. Вот и пердолятся с if'ами.
>>475079 > Единственный профит исключений это более чистые сигнатуры функций. Это не преимущество, а недостаток. Возвращаемый тип как раз и должен показывать, может ли функция вернуть ошибку или нет.
>>475083 >Возвращаемый тип как раз и должен показывать, может ли функция вернуть ошибку или нет. Возвращаемый тип должен показывать возвращаемое значение, а про ошибки - это throws (ну либо на месте лови).
> Есть несколько типов наследования: Полиморфизма может?
> Из них только полиморфизм подтипов завязан на классы. Интерфейсы по моему тоже. Класс может реализовывать интерфейс, а обычный глупый тип в Си не может.
> Забавный факт: есть языки кроме С или джавы. Да, но в других языках может не быть еще чего-то. Например в хаскелле нет возможности менять значения переменных и писать императивный код, потому просто так взять и использовать его замечательную (хотя и малопонятную мне) систему типов для написания приложения не получится.
Ну если тип может содержать методы, реализовывать интерфейсы, может правильнее начать уже называть его классом?
Я привел эти языки как наиболее известные и понятные и только для иллюстрации.
> Вообще-то, это довольно важная деталь реализации Нет, не важная. Важно что мы можем переопределить метод в наследнике, а как это реализовано ниже не имеет значения, лишь бы соблюдались все нужные гарантии. Например компилятор может обойтись и без виртуальной таблицы методов если удастся выоптимизировать полиморфный вызов на этапе компиляции или JIT.
> Без параметризации компилятор не знает, какой именно тип скрывается за интерфейсом, Мы по моему о разных вещах говорим. Я имею в виду Ява-интерфейсы которые представляют собой просто набор требований к классу. Все что нужно для их проверки в рантайме это знать какого класса у тебя объект и какие интерфейсы этот класс реализует. Для проверки на этапе компиляции достаточно сравнить список методов в классе и интерфейсе.
> какой именно тип скрывается за интерфейсом, За ява-интерфейсом ничего не скрывается, это просто набор требований к классу.
Трейты в расте хоть и похожи на интерфейсы в Яве, но как минимум одно различие видно сразу. В Яве класс явно говорит какие интерфейсы он реализует:
class A implements Bable, Cable, Dable
В расте это неизвестно, не знаю, хорошо это или плохо.
> Есть тенденция использовать типажи/примеси вместо наследования. Тебе лучше бы приводить примеры языков. Я не очень понимаю как можно примесь использовать вместо наследования. Вот допустим мы наследуем Танк от ТранспортногоСредства. Это логично и понятно. Как ты это заменишь примесью и какая от этого выгода?
каждый вызов мы оборачиваем в ифы. С исключениями мы делаем так:
try { ответ = обработатьHTTPЗапрос; } catch (e) { ответ = сгенерироватьСтраницуОшибки }
послать ответ;
У нас один try/catch на все приложение вместо кучи ифов (потому что исключения это исключительные ситуации и обычно их не происходит потому и куча try не нужна). Если ты так не любишь исключения разберись для начала что это такое, а потом спорь.
Еще мысль. Исключения нужны для обработки с минимумом строчек кода исключительных ситуаций вроде сетевых ошибок, таймаутов, ошибок файловой системы, неправильно переданных параметров (из-за неправильно написанного кода). Хипстеры думают что если убрать из языка исключения то исключительные ситуации перестанут происходить или их можно будет не обрабатывать?
Это же не хаскелл-функция вычисления чисел Фибоначчи, а реальное приложение без проверки корректности на этапе компиляции, работающее на реальном железе и написанное реальными программистами.
>>475088 >потому что исключения это исключительные ситуации и обычно их не происходит потому и куча try не нужна В Go это понимают и именно поэтому, вместо исключений, сделали божественные panic-recover. Является ли ошибка при парсинге пользовательской строки чем-то "исключительным"? Я не думаю. И именно поэтому там используется "scope-based error checking", которые позволяют решать проблемы по мере их поступления и на месте.
Еще одно ошибочное заблуждение состоит в том, что новички убеждены в том, что error в Go — это строка. На самом деле, это не так.
panic/recover это то же самое что try/catch? Если да то название странное. Не выкидывать исключения и возвращать ошибку можно и в Яве.
> новички убеждены в том, что error в Go — это строка. На самом деле, это не так. Я чувствую скоро разработчики Go узнают что бывают классы исключений и можно фильтровать их в catch.
>>475096 >panic/recover это то же самое что try/catch? Нет, throw, например, в Java, экстренно обрывает выполнение функции и передает экспешн по стэку, где кто-то его ловит. Panic в Go завершает выполнение функции и выполняет все defer вызовы определенные внутри. Внутри defer вызова может быть вызов recover() ф-и, которая вернет ошибку, переданную в panic. Этот механизм позволяет решать проблемы сразу и на месте, не создавая сомнительных исключений. Тут стоит задаться вопросом: ты всегда знаешь, где что может выбросить экспешн? Если да, то почему каждая вторая программа на Java время от времени крашится от того, что кто-то где-то этот экспешн не поймал. Recover, в принципе, можно использовать, как try-catch везде (в контексте defer вызова), но это нарушает идеологию.
>Гугл ничего не выдает по этим словам Потому что таким образом я криво сформулировал суть кратко. Scope-based error handing это, по-сути, обработка ошибок в пределах scope их возникновения, т.е. прямо на месте.
Если panic/recover работает только внутри одной функции это значит что ты все равно должен передавать ошибку наверх, только вручную. Не вижу выгоды.
> Этот механизм позволяет решать проблемы сразу и на месте, не создавая сомнительных исключений try/catch тоже можно ставить на тех уровнях где ты заинтереснован в обработке. На практике это обычно самый верхний уровень: если ты не можешь соединиться с Бд или прочесть файл в прилождении блога, то незачем продолжать выполнение.
>>475086 > Полиморфизма может? Да, полиморфизма. > а обычный глупый тип в Си не может Это проблемы Си. Вот пример: http://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html Типаж PartialEq реализован для самого что ни на есть примитивного типа i32. > Я имею в виду Ява-интерфейсы которые представляют собой просто набор требований к классу. Пусть функция принимает `*‹InterfaceName›` как аргумент. Как ей вызвать методы данного интерфейса? Есть два варианта: статическая диспетчеризация или динамическая диспетчеризация. В первом случае мы параметризуем метод типом, который реализует данный интерфейс, и методы действительно используются напрямую. Во втором случае они используются косвенно, через таблицу виртуальных методов. У этих подходов есть свои достоинства и недостатки: статическая диспетчеризация быстрее, но генерирует много кода в итоговом бинарнике (за счёт специализации), динамическая диспетчеризация медленнее, но гибче и кода не генерирует. Вот подробнее про всё это: http://doc.rust-lang.org/1.0.0-beta/book/static-and-dynamic-dispatch.html http://smallcultfollowing.com/babysteps/blog/2014/11/26/purging-proc/ (старая статья про замыкания) > Вот допустим мы наследуем Танк от ТранспортногоСредства. Это логично и понятно. Да, только чаще нам интересно, что тип может делать, а не его родословная. К примеру, строки можно: заимствовать, создать из итератора, преобразовать в итератор, расширить, сравнить, отобразить, хешировать, сложить, индексировать, и так далее. И на всё это есть свои типажи. Причем типажи, в отличие от интерфейсов, могут содержать реализация по умолчанию.
>>475092 > Исключения нужны для обработки с минимумом строчек кода исключительных ситуаций вроде сетевых ошибок, таймаутов, ошибок файловой системы, неправильно переданных параметров (из-за неправильно написанного кода). Только вот есть проблемы: - Типовая ошибка — такой же результат, что и возвращаемое значение. И их следовало бы отличать от тех ошибок, когда происходит что-то неприемлемое. Подробнее см. https://wiki.haskell.org/Error_vs._Exception - Монадический механизм обработки ошибок может быть не менее удобен, чем try-catch. Но он требует поддержку HKT в языке. > Я видел в расте try!() иначе чем ugly as a fuck это не воспринимается. Да, с HKT было бы лучше всё это.
> Как ей вызвать методы данного интерфейса? Реализация не важна. Например первое что приходит в голову это сделать в во всех объектах ссылку на хеш-таблицу вида (имя метода -> адрес). Это может быть очень неэффективно, но тем не менее работает. Потому реализация не важна когда мы говорим об особенностях ООП. Какие там байты что хранят никак не влияет на наличие инкапсуляции или полиморфизма.
> Да, только чаще нам интересно, что тип может делать Тут нужен интерфейс.
> . К примеру, строки можно: заимствовать, создать из итератора, преобразовать в итератор, расширить, сравнить, отобразить, хешировать, сложить, индексировать, и так далее. И на всё это есть свои типажи. Это интересный подход, но сказать что он лучше или хуже традиционного ООП я не могу. По моему это вообще к ООП имеет отдаленное отношение.
> Причем типажи, в отличие от интерфейсов, могут содержать реализация по умолчанию. Это как? Функция которая работает с данными любого типа?
>>475105 >panic/recover работает только внутри одной функции Нет, паника передается вверх по стэку, как ошибка. Если ее никто нигде не ловит, то она завершает выполнение приложения. >ты все равно должен передавать ошибку наверх, только вручную На деле это примерно так и выглядит. В моем рабочем проекте стэк вызовов для построения странички зачастую доходит до пяти-шести. И да, ты передаешь error как второй параметр вверх по стэку, если что-то пошло не так. В этом нет ничего зазорного и это часть концепции идиоматического Go кода.
>>475114 > Реализация не важна. Трудно говорить о разновидностях полиморфизма, никак не затрагивая реализацию. > Это как? Функция которая работает с данными любого типа? С данными типа, реализующими данный типаж. Вот простой пример: http://doc.rust-lang.org/nightly/src/core/cmp.rs.html#46-55 Есть два метода, `==` и `!=`. И второй из них естественно определить как `!self.eq(other)`.
Пример там не очень удачный. Автор пишет, что если индекс не создался. А почему такое может быть? Мне в голову приходят варианты:
1) неправильный SQl код - ошибка автора программы, ничего не поделать 2) ошибка соединения, например прервалось соединение или упал сервер Бд — опять же, в этом случае мы не можем даже исправить проблему если у нас есть код для этого
То есть как раз подход с исключением тут хорош: выводим сообщение и пользователь знает что у него может быть есть кусок недосозданной базы данных.
Надо просто дописать код чтобы при повторном запуске программа не создавала новую БД а использовала или дропала старую.
— исключительные ситуации происходят независимо от языка. Ну например ошибки ФС или ошибки деления на ноль (в яваскрипте не происходят но это скорее
— в любом случае мы должны будет выйти из функции наверх, желательно передав информацию об ошибке
try/catch позволяет решить эти проблемы меньшим количеством кода.
> У тебя манованием руки пропадают ЛЮБЫЕ uncaught exceptions Пропадают исключения или перестают происходить исключительные ситуации? Я бы был заинтересован во втором, а не в первом с необходимостью ставить везде ифы или их аналоги.
>>475142 > finally в другой функции и вряд ли поможет. А надо засунуть внутрь той, где происходит получение ресурса и перевыбросить соответствующее исключение в кече, которое замечательно пойдет вверх по стеку.
Для упрощения этого паттерна в сисярпе придумали using {} который вызовет Dispose что бы ни произошло в любой строчке кода в блоке.
В D для этого же используется scope(exit), что позволяет строить еще более сложные конструкции с уверенностью, что оно выполнится в любом случае на выходе.
В крестах - деструкторы.
Все давно делают RAII, нет блять, годауны придумают какое-нибудь свое уебанство, назовут как-нибудь хитровыебанно и будут орать на каждом углу, что все дибилы кроме них.
Ошибка чтения файла это исключительная ситуация. В нормально работающей системе очевидно все нужные файлы должны быть на месте и проще поддерживать порядок чем писать для каждой операции чтения код обработки ошибки чтения.
На мой взгляд ошибка это например неправильно заполненная форма регистрации. Ну так никто и не предлагает для ошибок в форме регистрации использовать исключения, if и возврат ошибки тут работают хорошо:
ошибки = проверитьФорму; если (ошибки есть) { .... } иначе { ... }
>>475102 >Panic в Go завершает выполнение функции и выполняет все defer вызовы определенные внутри. Внутри defer вызова может быть вызов recover() То есть да, это то же самое что и try-except-finally, только содержимое except-ов пишется внутри finally. >Тут стоит задаться вопросом: ты всегда знаешь, где что может выбросить экспешн? Все может выбросить эксепшон, точно так же как и все что в го возвращает значение-ошибку может вернуть ее абсолютно любую. Только вот эксепшон хотя бы гарантированно прервет выполнение программы, а в го если ты после кучи своих проверок на разные ошибки забыл дописать catch-all (else if err != nil { return err; } или вроде того), и в новой версии либы появится новый вариант ошибки, то твоя программа на го эту ошибку тупо игнорирует и волшебным образом превращается в программу на пхп. >почему каждая вторая программа на Java время от времени крашится от того, что кто-то где-то этот экспешн не поймал Что характерно, крашатся они в основном от знаменитого NullPointerException. Как видишь иксепшоны проверить легко, а вот возвращаемое значение ифом проверить у кодеров руки отваливаются. Чем твое if err != nil { return err; } лучше жабоблядского if (yoba == null) { return null; }? >>475105 >Если panic/recover работает только внутри одной функции Нет, recover можно делать где угодно выше по стеку. Вон примеры есть: http://blog.golang.org/defer-panic-and-recover >>475123 >У тебя манованием руки пропадают ЛЮБЫЕ uncaught exceptions на ЛЮБОМ уровне исполнения. От того что ты их переименовал в unchecked error types суть не поменялась. Не поймал исключение, не проверил err на одно из возможных значений, какая разница?
Как я понимаю, чтобы это работало, все функции/конструкции языка должны поддерживать завернутые внутрь Try значения, либо же тебе придется каждый раз распаковывать/запаковать это значение для обработки? Нет ли риска тогда что код будет загрязнен кучей match? И если функция поддерживает завернутое в Try значение, сможет ли она работать с незавернутым?
>>475167 Читай внимательнее же. Есть функции и синтаксис чтобы применять обычные функции к завёрнутым. В этом вся суть монад: можно создавать цепочки из функций, которые берут обычные значения и возвращают завёрнутые, и можно применить обычную функцию к завёрнутым данным. А уже потом сделать match на конечном результате.
> Этот механизм позволяет решать проблемы сразу и на месте, Суть исключений в том что их нельзя решить на месте. Функция отправила запрос в базу данных, но ей пришла ошибка (запрос неправильно составлен или попытка вставить 40 символную строку в колонку с ограничением на 20 символов) со стороны сервера. Или она начала получать данные но в процессе чтения превышен таймаут или разорвалось соединение.
Потому они и называются исключения
> то почему каждая вторая программа на Java время от времени крашится от того, что кто-то где-то этот экспешн не поймал. Потому что программисты которые их пишут делают ошибки, а сами программы сложны и сложно предусмотреть все возможные ситуации. Один программист создал в БД колонку на 20 символов, другой пытается записать в нее 40. Если есть какие-то средства предотвращать такие ошибки до запуска — это отлично. Если нет то никакие переименования catch в recover или монады не помогут.
> Recover, в принципе, можно использовать, как try-catch везде (в контексте defer вызова), но это нарушает идеологию. Тогда я не понимаю. Исключительные ситуации происходят, информацию о них надо передавать наверх. если не через try/catch то как?
> Scope-based error handing это, по-сути, обработка ошибок в пределах scope их возникновения, т.е. прямо на месте. Исключения придуманы для проброса информации об ошибке через стек вызовов. Следовательно, если ты обрабатываешь ошибку в той же функции что она возникла ты должен использовать if а не исключения. Первый раз сегодня я услышал что if теперь называют «Scope-based error handing».
Ну если я правильно понимаю, то код с монадой (?) выглядит так:
parseURL("garbage").map(_.getProtocol)
в то время как код с исключениями так:
parseUrl("garbage").getProtocol()
то есть использование Try принуждает нас писать все вызовы функций и методов немного по-другому с использованием map и аналогичных методов либо заворачивая их в Try(..)?
Там еще есть второй пример:
def getURLContent(url: String): Try[Iterator[String]] = for { url <- parseURL(url) connection <- Try(url.openConnection()) is <- Try(connection.getInputStream)
Но я не очень понял, такой странный способ записи нужен только ради Try или и с исключениями получилось то же самое?
> А уже потом сделать match на конечном результате. А что если начинающий кодер вместо match сделает просто println(result.get()) ? Старое доброе исключение?
Такие вещи наверно лучше гарантировать на уровне языка, например давая доступ к значению только внутри ветки match Success. Иначе люди будут писать get потому что это короче.
>>475165 >ты после кучи своих проверок на разные ошибки забыл дописать catch-all (else if err != nil { return err; } или вроде того) Такое почти невозможно, потому что все люди по идиоматике делают проверку if err != nil и уже внутри проверяют на вид ошибки. >Как видишь иксепшоны проверить легко, а вот возвращаемое значение ифом проверить у кодеров руки отваливаются. Ты упускаешь один факт — когда в сигнатуре функции в Go есть error, то становится ясно, что надо принимать ошибку. Сигнатура функции в Java ни о чем таком не говорит и ты можешь узнать о том, что она может выбросить эксепшн только из документации.
К тому же, у тебя несколько некорректное сравнение. Когда ты пишешь код:
status, err := module.StatusFor(thing)
То очень сложно забыть после этого проверить err на содержание ошибки. В жабе же проебать эксепшн — святое дело (это я тебе говорю человек, который работал в кучке жабопроектов на протяжении лет пяти).
>>475171 >Первый раз сегодня я услышал что if теперь называют «Scope-based error handing». Во-первых, не if так называют, а подход при обработке ожидаемой ошибки. И во-вторых, его так называю только я, чтобы пояснить всю суть божественной обработки ошибки "тут и сейчас", без пробрасывания говна сквозь стэк.
>>475196 >В жабе же проебать эксепшн — святое дело Как, как блять можно проебать эксепшн в языке, где достаточно поставить try {} catch на main?? Пиздец.
> Сигнатура функции в Java ни о чем таком не говорит Поэтому изобрели божественный nothrow
>>475207 >Как, как блять можно проебать эксепшн в языке, где достаточно поставить try {} catch на main?? Пиздец. Умоляю, скажи мне, что ты знаешь, почему это bad practice!
>Поэтому изобрели божественный nothrow Да, я тоже пишу на плюсах и знаю, что там есть nothrow. Кстати, я ОП треда доминирования крестогоспод ^_^
>>475210 > Умоляю, скажи мне, что ты знаешь, почему это bad practice! Откуда вы лезете, мамкины максималисты? Лучше у тебя приложение/модуль/любое место крашнется в продакшне без лога, потому что ты такой весь из себя охуительный и точно уверен что выдрочил во всех местах все возможные ошибки?
Я тоже могу ебаться по два года и выдрачивать все вообще возможные места, а могу за месяц все сделать, повесить снаружи хендлер и смотреть что может пойти не так в тестировании, блять.
Если ты софт к АЭС пишешь, то ни го ни другое императивное говно по надежности не подходит.
>>475215 >в продакшне Нет, в продакшне конечно надо ЛЮБОЙ краш отлавливать, но при непосредственной разработке ты должен быть уверен, что все, что может бросить эксепшн у тебя завернуто в try и ты правильно реагируешь на эту нештатную ситуацию. Это очевидная, неписанная истина.
>Если ты софт к АЭС пишешь, то ни го ни другое императивное говно по надежности не подходит. Спорный вопрос. Я думаю, что для софта на АЭС подойдет практически любая технология, только тщательно оттестированная всевозможными тестами.
>>475198 >божественной обработки ошибки "тут и сейчас" >божественной Перестань нести хуйню, долбоеб. На деле схожие ошибки обрабатываются одинаково и код в итоге состоит повторяющейся лапши чуть более чем полностью. В противном случае ты передаешь ошибку вверх для более общей обработки. Охуеть, блядь, "божественная".
>>475216 > при непосредственной разработке ты должен быть уверен, что все, что может бросить эксепшн у тебя завернуто в try и ты правильно реагируешь на эту нештатную ситуацию. Это очевидная, неписанная истина.
Это хуйня на постном масле, придуманная максималистами вроде тебя или садистского создателя го. Что, если я пишу прототип чего-то? Скрипт под одну задачу? Хороший язык предоставляет мне выбор - если я хочу положить болт и словить неочевидные ошибки постфактум - я могу это сделать. У го же в сути - заставить тебя сделать так, а не иначе, как будто ты априори криворукий абсолютно уебан и не можешь даже стиль выдержать. И что самое интересное - это не поможет - все равно будет хуевый падающий код с логическими ошибками, если тебе нужно писать его быстро - так же как и везде. Потому что без верификации это все бессмысленно.
>>475226 Мартышка, никто тебя не заставляет в го ничего ловить, можно просто принять ошибку на /dev/null и ничего тебе за это не будет. Но зачем нарушать идиоматику в таком очевидном месте? Это же очевидный выстрел в ногу!
>>475232 > Но зачем нарушать идиоматику в таком очевидном месте?
Чтобы не плодить как даун лапшу из ифов может быть? Нахуя вообще учить язык, который навязывает какую-то мягко говоря спорную высосанную кем-то из пальца идиоматику? Что, вот ты, даунёнок, сел писать на го и у тебя сразу получаются более безопасные программы? Или более понятные? Лол.
> выстрел в ногу Выстрел в ногу в императивной параше бывает только один. Коррапт памяти. Остальное - полная хуйня.
>>475241 Да причём тут хейт, мне что нехуй делать, сидеть ненавидеть то или иное поделие. Мне скорее припекает от форсеров объективно хуёвого, и главное, бесполезного языка. Максимум оно заменит предыдущее хипстоговно вроде ноджс, не более.
Вообще, конечно, мне кажется в го-треде надо обсуждать изучение этого языка, а мы как-то недружелюбно себя ведем, пришли в тред, обругали всех и ушли. Но с другой стороны, я зашел только потому что тут ругали ООП и исключения. Это может быть старые и не очень модные среди молодежи технологии, но это не повод от них отказываться. Придумайте сначала что-то получше, подумайте какие они проблемы решают и как это сделать лучше, а не отбрасывайте просто потому что они старые. Возвращаться к цепочке ифов назад в 80-е это явно не решение.
>>475261 > Придумайте сначала что-то получше, подумайте какие они проблемы решают и как это сделать лучше, Так придумали ведь уже давно. Только вот в го всего этого нет.
>>475265 1. Становись модным петухом, чтобы люди делали тоже, что и ты. 2. Внезапно перейди на <годный язык нейм> 3. Засри в твиттор какой <годный язык нейм> охуенный 4. ??? 5. Профит
>>475250 > Да причём тут хейт, мне что нехуй делать, сидеть ненавидеть то или иное поделие. Так ты этим и занимаешься тут. Вас мама случайно не через анал родила? С логикой то не порядок.
>>475196 >Сигнатура функции в Java ни о чем таком не говорит В жабе есть checked exceptions, которые надо объявлять через throws и обязательно где-то ловить, иначе конпелятор ругаться будет. Они работают настолько хорошо, что в сраном акторе IOException нельзя выкинуть несмотря на то, что глобальный обработчик его бы все равно поймал, и в результате приходится устраивать ебаный цирк чтобы наебать эту статически типизированную парашу. В го все что компилятор проверит - это что ты где-то ошибку сохранил, а дальше ему похуй. >То очень сложно забыть после этого проверить err на содержание ошибки. Только чтобы реализовать что-то отличное от return err; (что эксепшоны делают по умолчанию) придется все равно открыть документацию и проверить, а какие же все-таки ошибки могут быть. В результате получаем то же самое, только кода больше.
>>473014 Погодите, так в этом говне ни ООП, ни нормальной системы типов? Как на этой параше писать тогда? Т.е. это и не ОО-ЯП, и не ФЯ, и даже метапрограммирования тоже нет. Это низкоуровневый язык штоле?
>>475672 ну эт кароч как на си тольк не на си а на го ну тип ну гк виртуалочка там ллвм ну зато меньше чем джава ест ну раст же нештабильный ну риальныя компиляция никак у скриптов тип ну хуй знает короч
>>473014 · Go doesn't really do anything new. · Go isn't well-designed from the ground up. · Go is a regression from other modern programming languages. http://yager.io/programming/go.html
>>475767 О, сколько раз разношерстные питухи давали мне ссылку на эту статью... Настало время разобрать все по частям:
>Generic Programming В этом разделе автор кукарекает про то, что так как в Go нету generics, а только даункастинг от interface{}, после неосторожного программирования ты рискуешь быть обосранным, добавляя в один и тот же самый список переменные разного типа. В принципе, он прав насчет этого. Тут мало что можно возражать. Generics просто не являются частью языка, идиоматика пострена вокруг interface{}. Может быть, до Go 2 еще дожить надо, и generics появятся. Пока в них чтобы уж так сильно никто не нуждается. >Language Extensibility >Go does not support operator overloading or keyword extensibility. И это очень правильное решение! Автор питух в этом разделе говорит лишь о том, что в Go нету костылей вроде __add__ из питона или operator из С++, которые лишь вносят непонятки в код. Идиоматика Go построена вокруг работы с pure data, а такая вещь, как сложение двух струкутр — это бред. Короче говоря, тут автор тупо обосрался, потому что в Go нету сахарка (сомнительного, причем). >Base Cases and Failure Conditions Это вообще стыд. Сначала он критикует язык за то, что в нем нулевой указатель называется nil, а не null, как в других языках (и что?). Потом он говорит, что nil-указатель это небезопасная конструкция (ЛОЛ) и что вообще это неверно, хотя его не ебет, что все современные языки используют именно эту концепцию. Короче говоря, какая-то хуета. Взамен работающей концепции errors-as-values, он предлагает (внимание) алгербраические типы и типобезопасные режимы ошибок. Тут все ясно. >Type Inference Наводим какой-то пример из хаскеля, а потом говорим, что хоть в Go и есть хорошее решение (:=), но это все равно не круто, потому что "можно тип rhand-выражения самому вывести". Самый несостоятельный из пунктов статьи. Пример на жабе, ввиду своей опущенности, был опущен намеренно (какая игра слов!). >Immutability Сомнительная хуета, на самом деле. Если ты не хочешь, чтобы какая-то переменная менялась, то просто не меняй ее. Это очень просто и понятно. С другой стороны, immutable declarations — приятная вещь и может быть, когда-то в Go ее добавят. >Control Flow Structures Смешно. Говорит, что Rust очень хороший потому что там есть pattern matching, а потом говорит, что Go, несмотря на то, что имеет "does have some nice control flow primitives for certain things, like select for parallelism", все равно хуйня, потому что нету его любимого паттерн-матчинга :) >Embedded Programming Это не проблема Go и даже автор делает на этом акцент. Не понимаю, зачем он вообще добавил этот раздел в статью: "Go relies heavily on the usage of dynamic allocation. There is no practical way to constrain Go code to use only stack memory. This is not a problem with Go. This is perfectly fine within Go's intended area of usage."
>TL;DR Ну и напоследок автор решил сделать несколько замечательных выводов: >Go doesn't really do anything new. будто кому-то должен. go сделал многие вещи (например, потоки) проще и понятнее >Go isn't well-designed from the ground up. кто-то говорил, что он разработан для "ground up"? >Go is a regression from other modern programming languages. implying, что все современные ЯП в его понимании, это ООП (Объектно Ориентированная Пораша). Go в этом плане отличается и избавляет разработчика от хуеты вроде виртуальных деструкторов.
>>475772 > Generics просто не являются частью языка, идиоматика пострена вокруг interface{}. Может быть, до Go 2 еще дожить надо, и generics появятся. Пока в них чтобы уж так сильно никто не нуждается. НИНУЖНО > Потом он говорит, что nil-указатель это небезопасная конструкция (ЛОЛ) и что вообще это неверно, хотя его не ебет, что все современные языки используют именно эту концепцию. > все современные языки Это действительно небезопасная конструкция, и современные языки (например, Rust, а не говно мамонта вроде Java, где даже лямбды лишь недавно завезли) её не используют. > Взамен работающей концепции errors-as-values, он предлагает (внимание) алгербраические типы и типобезопасные режимы ошибок. Действительно, зачем нам какие-то алгебраические типы, это же так сложно, гоблядям не осилить. > Сомнительная хуета, на самом деле. Если ты не хочешь, чтобы какая-то переменная менялась, то просто не меняй ее. В самом деле, зачем нужна проверка типов. > Говорит, что Rust очень хороший потому что там есть pattern matching, а потом говорит, что Go, несмотря на то, что имеет "does have some nice control flow primitives for certain things, like select for parallelism", все равно хуйня, потому что нету его любимого паттерн-матчинга :) Надо всё же отметить, что сопоставление с образцом не очень полезно без алгебраических типов (которые гобляди не осилили).
>>475741 К сожалению, ты неправ, с памятью действительно есть проблемы. Из-за автоматического боксинга+выравнивания на 8+заголовков объектов+прочее говно (типа энтрисета в мапе) оверхэд у коллекции на одну запись просто неебический. new int[1kk] это 10 мегабайт, а new HashSet<Integer>(1kk) это 130+ мегабайт, да еще и хуй пойми как разбросанных по памяти. Даже последовательное чтение из ебучего arralist нихуя не кэшфрендли. За пруфами ставь jol.
На самом деле ситуацию спасает кодогенерация всякими trove и openhft-коллекциями, но это костыли, за которые мы тут гнобим гоблядей. Может, value-типы в десятке спасут положение
>>476033 Ну расскажи мне, что ты можешь написать на джаве без javax неймспейса. Может быть, ты подключаешь Spring или Hibernate, и думаешь, что там нет EE? Может быть, ты пишешь чатик с RMI, и не знаешь, что такое CORBA? Может быть, ты рисуешь в эклипсе формочки, и думаешь, что AWT и Swing живут сами по себе? Может быть, ты качаешь Guava или Apache Commons, и думаешь, что там не используются подпространства Net и Nio из стандартной библиотеки?
Java без спецификаций API и огромного количества библиотек их имплементирующих - кусок говна без задач.
>>476082 Хули ты с темы соскакиваешь, уебок. Только что писал, что ЕЕ и контейнеры не нужны, типа все без них можно, а теперь снова про память кукарекаешь. И, да, жрут, только не спецификации, а имплементирующие их библиотеки и зависимости. Или ты еще и не знаешь как класслоадер работает?
Никак я не пишу без javax.; Большая часть популярных библиотек действительно использует javax аннотации (или не только аннотации), но все они не дрочат только на этот пакет и в этом их плюс (и минус, как например джетти, которая вообще в своих релизах кладет хуй на обратную совместимость).
Проблема EE как раз не в стандартизации (это-то как раз заебись, хотя изменения там в основном и форсируются авторами контейнеров), а в том, что полная реализация стандарта - это как раз таки ебучие контейнеры, которые сильно тебя ограничивают. Кукареканья про то, что "удобно" шарить пулы/ресурсы между разными приложениями на одной машине отлично космпенсируются заебным деплоем и требованиями на память, а ебля с класслоадерами настолько всех доебала, что уже есть целые коммерческие тулы, которые ищут утечки в них.
Корба уже мертва, а к чему ты про nio и swing заговорил я вообще не ебу, еще бы про коллекции сказал.
Да, EE+контейнеры имеют место быть и активно живут, но это не повод их любить и использовать их всегда, когда тебе нужен ioc/транзакции/another part of standard*, потому что в 90% случаев их минусы не окупают их плюсов. Такие дела.
>>476087 Уебка в зеркале увидишь. Я не писал, что >ЕЕ и контейнеры не нужны, типа все без них можно но это верно. Ни один из продуктов нашей компании не использует EE контейнер. >а имплементирующие их библиотеки и зависимости Т.е. в плюсах аль шарпах это не так? Очнись, Вася, ты обосрался.
>Для запуска с EE либами сейчас нужно минимум 256мб, и это без сервера приложений. Пруфы по этому пункту будут? Если я проведу эксперимент и там будет меньше 256мб, то ты пиздабол. inb4 запускать со всеми реализациями всех спек EE.
>>476159 >>476117 Примеры того, что можно написать без ЕЕ либ, или либ, использующих ЕЕ либы, решающее реальные задачи будут? Ну кроме андроеда и батчей.
Java EE 7 SDK Update 1 distributions require JDK 7 Update 65 or above or JDK 8 Update 20 or above. Ensure that the required JDK software is installed on your system and that the JAVA_HOME environment variable points to the JDK installation directory, not the Java Runtime Environment (JRE) software.
The minimum and recommended memory and disk space requirements are as follows:
Minimum memory: 1 GB Recommended memory: 2 GB for Windows platforms, 1 GB for non-Windows platforms Minimum disk space: 250 MB Recommended disk space: 500 MB
>>476208 Ты как-то выборочно читаешь ответы, видимо. Я же вроде сказал, что без самого пакета javax не написать, только вот в качестве имплементации не надо использовать контейнеры и привязываться только к javax (как это и делают все нормальные фреймворки)
>>476208 >Примеры того, что можно написать без ЕЕ либ У меня проект, где используется Hibernate, но не JPA. И что вообще за тупой вопрос. Жил библиотека, а потом реализовала EE спеку шоб было - и что теперь - зашквар? Ты хуйню несешь какую-то.
>>475772 >>Go isn't well-designed from the ground up. >кто-то говорил, что он разработан для "ground up"? В голосянду. Что ты там комментируешь, если настолько не знаешь английский? > Чистой воды скептицизм. Такое можно сказать про любой ЯП. Не про любой. Есть много языков с хорошим дизайном from the ground up. Но это не про гопарашу, естественно.
>>476664 > в запарке неправильно прочитал и неверно понял Пиздец у тебя оправдания, настолько неправильно прочитать может только человек, который язык только в школе учил. Я гарантирую, ты полтекста неверно понял, даун.
Go сейчас плотно занимает одну нишу - всевозможные системные тулы и тулы для devops-а: docker, etcd, бэкэнды для grafan-ы и flappjack-а, куски опенстека уже перписываются на нём, Хаши, разработчик vagrant, тоже свои последние тулы пишет на го. Скорее всего такая популярность у инструментальщиков связана с компиляцией го в один единственный бинарь, что существенно упрощает деплой и пакетирование, избавляя от кучи ненужных зависимостей. Ибо ради какого-нить мониторинга или агрегации логов тащить на прод руби, или упаси господи jvm, рантайм - нехуй делать.
>>478123 В 7 шарпе обещают. По ходу F# в итоге сдохнет, потому что будет нахуй никому не нужен, т.к. все фичи будут в С# вместе с привычным синтаксисом.
>>478175 > все фичи будут в С# вместе с привычным синтаксисом Да ну, уебский там синтаксис будет, как обычно. Фадиез лаконичнее раза в 2 же для функционалодрисни.
>>475772 >Пока в них чтобы уж так сильно никто не нуждается. Ну пиздец. Без дженериков можно жить, но сложнее. Либо у тебя нетипобезопасный код, либо у тебя адов бойлерплейт для каждого такого случая. >operator из С++, которые лишь вносят непонятки в код Ну нихуя себе. Вот решил я написать библиотеку для работы с матрицами. В говняшной или шарпе я могу легко сделать так, чтобы можно было делать result = matrix1 + matrix2, что полностью соответствует предметной области. Как это будет выглядеть в Го? matrix1.Add(matrix2)? Говно же. >Взамен работающей концепции errors-as-values Говно уровня говняшной. >Immutability >Сомнительная хуета, на самом деле. Если ты не хочешь, чтобы какая-то переменная менялась, то просто не меняй ее. Да ты говноед просто. А если ты библиотеку на сторону отдал? А если криворукий еблан с php перелез и устроился к тебе в отдел? Мутабельность иногда позволяет экономить память, но она вообще должна быть скорее исключением, чем правилом. То, что в Го нет иммутабельности — это просто шаг назад. Хотя казалось бы не такая уж и сложнореализуемая фича.
>implying, что все современные ЯП в его понимании, это ООП (Объектно Ориентированная Пораша). Автор всю статью сравнивает Го с функциональщиной. И тут ты делаешь вывод про ООП. Ты вообще статью читал?
>>478194 >библиотеку для работы с матрицами >диез Не взлетит. Во-первых нету женерик операторов, для double и float надо дублировать код, во-вторых ты не сможешь сделать продвинутые оптимизации вроде http://eigen.tuxfamily.org/dox/TopicInsideEigenExample.html и оно будет пиздец как тормозить. Про кривой инлайн я даже молчу.
>>478216 >Во-первых нету женерик операторов, для double и float надо дублировать код Ты забыл про dynamic. >во-вторых ты не сможешь сделать продвинутые оптимизации вроде Так это крестоболезни какие-то.
>>478123 > к тому же ололо сомнительных > раст Да ты охуел. > и каким-то хуем оказалась Всё очень просто: в раст завезли алгебраические типы, и чтобы работать с ними без костылей — сопоставление с образцом. Впрочем, годебилы вроде тебя и про алгебраические типы кукарекнут «НИНУЖНА!!1».
>>478327 > мутабельность добавят как только GC научится с ней охуенно работать, там какие-то загвоздки есть. > GC научится Еще один незамутненный ньюфажек. Про write barriers слышал? Конечно же нет, зачем это знать годауну.
>>478361 Haskell — самая быстрорастущая технология среди новых ЯП. Большая поддержка сообществом, тысячи пакетов на гитхабе. Да, он всрался, и всрался он хуевой туче людей, но в это множество не входят уебки с сосача, вроде тебя.
https://www.youtube.com/watch?v=bAQ9ShmXYLY >JP Robinson, a senior software engineer at The New York Times, walks through how his team has come to adopt Go for almost all back end development.
>>478442 Конечно будет, хоть го и обоссанное дерьмо. Там на порядок разницы же.
> Static C#: 13ms > Dynamic C#: 249ms
Но так-то все пользуют либы линейной алгебры на крестах. Просто нужен язык в котором можно нормально метапрограммить. Я начинал кодить такой же реврайт кода как и в eigen на D, получил примерно ту же скорость.
>>478490 Кого нас то? Кого нас? Я тут один, блять. Не устроил. Я бы и прямщас Го для андроида юзал, лишь бы ебучую жабу больше не видеть. Но ладно, так уж и быть, ГЦ вещь нужная, пусть оптимизируют. Stop-the-world параша никуда не годится.
>>479289 Что во внеочередной раз доказывает, что го соснул. > интерпретатор лиспа способен запилить даже полный криворукий даун Не совсем так. Если только какой-то очень-очень примитивный диалект лиспа. Даун даже r5rs запилить не сможет, не говоря уж об общелиспе
>>479301 > очень-очень примитивный диалект лиспа Ну так суть лиспа-то будет. Там семь операторов всего надо что ли и дальше можно на этом строить что хочешь, разве нет? Я пилил такой примитивный из SICP, разве что с tail call оптимизацией даже.
>>479309 >Ну так суть лиспа-то будет. Нет. Суть лиспа в гомоиконности, а не примитивности. >семь операторов всего надо что ли и дальше можно на этом строить что хочешь Ну попробуй хотя бы часть cl построить на семи "операторах" функции тащемто, в лиспах нет операторов
>>479286 >лисперам на него похуй >>479289 >лисперам на всё похуй Лисперам настолько похуй, что они кастуются в любой тред упоминанием лиспа и пытаются доказать, что лисп, не смотря на свою охуенность, никому, кроме двух калек не нужен.
>>479320 Ну что за хуйню ты пишешь? Можно было бы с натяжкой согласиться, если бы ты сказал, что достаточно read и eval. Но с большой натяжкой. Рантайм старых лиспов, не говоря уж о современных, в разы сложнее семи функций. Ты можешь в этом убедиться сам, прочитав lisp in small pieces или поизучав clhs
>>478064 >начинаешь думать о том, как правильно обрабатывать ошибки, а не тупо поднимать их вверх по стэку Запускаешь ты свою лабу, а с блоке чтения файла настроек среды у тебя скоррапченный файл, который существует, но не читается. Твои действия, обрабатывающий?
- Одну минуту, - громко произнес Пайк, - прежде чем продемонстрировать вам способ распития портвешка, о котором все вы, как будто, позабыли, я должен опорожнить свой кишечник. Вот каким образом главпетух приступил к омерзительной операции. Его окружили четверо годибилов: один держал наготове большой ночной горшок, второй взял зажженную свечу и подставил ее поближе к анусу, чтобы было лучше видно происходящее, третий сосал ему член, четвертый, перекинув через руку белоснежное полотенце, целовал Пайка в губы. Тот, опершись еще на двоих педерастов, поднатужился, и как только появилось невероятное количество дерьма, которое обыкновенно и регулярно выдавал хозяин параши, учитывая страшное количество поглощаемой им пищи, тот петух, что держал горшок, принялся восхвалять экскременты. «Какое прекрасное дерьмо! — восклицал он. — Ах, господин мой, какое превосходное говно! Как красиво вы испражняетесь». Когда дифирамбы закончились, педераст, вооруженный салфеткой, языком очистил преддверие ануса, а горшечник подставил содержимое горшка под нос Пайку и опять громогласно восхвалял его. После этого мощная струя мочи ударила в рот сосателю, который тут же проглотил всю жидкость, полотенце завершило то, что не мог сделать язык, и четверо годибилов, оставшись без дела, долго сосали поочередно язык, фаллос и задний проход распутника.
Байтослесарь допил портвешок и тяжело отставил пустую бутылку к батарее ее же собратьев, молчаливо поблескивающих в углу убогой комнаты, где кроме этих бутылок, задроченого спектрума, найденого на помойке и затертого томика "Hacker's Delight" не было ничего. Байтоеб лег на прожженый и мятый матрац и забылся в хмельном сне. Вот он стоит в свитере с оленями и ветер играет его немытой бороденкой. Чуть поотдаль стоят несколько карет, бентли и майбахов. Рядом громоздится сцена с кучей аппаратуры, где играют три человека. "Ого! Это же Нойзия! Та, у которой более 400 слоев баса!" - думает байтоеб, и слово по волшебству, один из людей на сцене оглядывается на него с раздражением. Чуть дальше видно несколько вертолетов. Рядом обильно уставленный банкетный стол - чего только на нем нет: лобстеры, устрицы, мясо по-мексикански, экзотические фрукты, и несколько сосудов с алкоголем. "Наверное портвешок" - радостно пронеслось в голове у слесаря, и он двинулся к столу с яствами. Подойдя чуть ближе, он увидел несколько человек во фраках и цилиндрах. Монокли поблескивали в свете нежного утреннего солнца, трости сияли начищенными золотыми набалдашниками. Лица этих людей характеризовала мудрость, строгость и бесстрастность. Лицо академика, ученого, первооткрывателя... Люди негромко и учтиво переговаривались между собою. Байтослесарь подошел ближе и, к своему разочарованию, заметил что сосуды на столе - бутыли с каким-то редким вином и дорогим коньяком. Портвейна там не было. Байтоеб испустил вздох разочарования. Люди в цилиндрах обернулись к нему. В одном он узнал Дона Сайма, в другом - Пола Грэма, в третьем - одного из воротил финансового мира, лица остальных тоже показались ему знакомыми. Люди, по всей видимости, играли в гольф, так как у многих из них, вместо трости, в руках были специальные клюшки - паттеры. "Элита!" - в панике подумал слесарь. Он развернулся чтобы убежать, но удар паттера настиг его с сокрушающей силой. Байтоеб упал на траву. В лицо его брызнуло что-то желтое и соленое. Последним, что помнил байтослесарь, был хохот элитариев, мочившихся неподалеку...
В этом ITT треде байтослесари сознаются, что с самого рождения опускаются на дно чана с говном и не покидают его до конца жизни. Любые формализмы, логические системы, концепции, идеи, правила проектирования, да и просто хорошего тона, чувство вкуса — все это для байтослесаря чуждо, он пытается убедить себя, что всего этого не существует в реальном мире.
Лаба1, обертки над обертками, вот я жизнь повидал, у нас в армейке/на зоне и не такое было, а ты теоретик лаборант говна не нюхавший, в реальной жизни все иначе, вот у меня на заводе кудах-тах-тах! — кричит он, наворачивая очередной черпак дерьма, жадно причмокивая.
Go - это такой питон, только с простенькими типами (в питоне их вообще нет), конкурентной моделью (хуёвой, использовать ссаные каналы с переключением контекста, когда вся индустрия давно уже акторами или STM'ом долбится, - вершина долбоебизма) и компиляцией в натив (весьма толстый бинарь на выходе). Язык откровенно говоря примитивный: нет классов, нет иксепшнов, нихуя нет. В конкурентных задачах сосёт у нормальных конкурентно-ориентированных ФП-языков вроде Erlang и Clojure. Главное преимущество Go - его максимальная простота, так что любой обгвидок или ноджеесовец может выучить его за вечер и начать использовать для своей перделки, на это создатели и ставили. В общем-то для больших задач, как и кложа не годится, но быстро прототипировать на нём норм, будешь модным.
>>483434 Не знаю о чем ты, мань, я на диезе с VS спрототипирую что угодно кроме математики в 2.5 раза быстрее, чем ты будешь дрочить свой лишп или пестон, и у меня будет оче простой и понятный ООПе кот.
>>483482 >эти фантазии штудента Это студентики, вроде тебя, как раз любят прототипировать лабу2 на пестоне. Нормальные люди поигрались на первом курсе и обходят всю эту парашу стороной.
Антоны, как думаете, Google переведёт разарботку под Android сугубо на Go или это вообще не о том опера? Просто, я совсем не понимаю для чего, кроме web создавался этот язык?
>>483892 >для чего, кроме web создавался этот язык? Позволю самому создателю го пояснить нам, зачем он нужен: >The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt. >>483464 >простой и понятный >ООПе Почини свою абстрактную фабрику траленка, а то она какую-то толстоту производит. >>483407 >Go - это такой питон, только [дохуя причин, по которым он на питон вообще не похож] А Java - это такой Haskell.
>>484399 >Почини свою абстрактную фабрику траленка, а то она какую-то толстоту производит. Я не виноват, что у зкдаунов-теоретиков вроде тебя ООП ассоциируется только с абстрактными фабриками и прочим GoFодрочем. Почти всё делается на наследовании и интерфейсах, иногда на композиции и на правильном декоплинге, но среди вас же софтвар архитектов чуть менее чем нихуя, откуда вам знать-то это. Дауны, блять.
>>484399 > They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python Все встало на свои места, типичный годаун, которому надо, чтобы язык пиздил его по пальцам.
https://github.com/mholt/caddy Я вам покушать принёс, братцы. Работает шустренько, но это не самое важное. Главное что один бинарник и всё красиво. Особенно радует структура (исходники) всё красиво и лаконично
>>485012 > Чего плохого в том, что язык достаточно примитивный и что говорится, verbose, если он позволяет за три месяца готовить полностью функционального кодера, который идеально вписывается в workflow?
Хреновый подход - забросать проблему макаками. Строгость языка не поможет избежать логических ошибок, проблем с сопровождением и производительностью проистекающих от криворукости кодеров, их количества и тупо числа строк кода.
Не зря есть предел числа программистов на любом проекте, не случайно lines of code - одна из основных метрик качества кода и не случайно в сегодняшнем софте столько проблем. Меньшее число более опытных программистов, пишуших меньше кода и больше тестов на более экспрессивных языках - это более сложно-реализуемый, но гораздо более правильный подход, чем то, что делает гугл с его рабской системой.
>>485029 >>485029 Разве Гугл не берет на работу лучших программистов в мире?
Три года? Если человек более-менее прилично не научился писать на джаве за любую половину этого времени - вон из профессии!
У тебя все с ног на голову, честно. Один и тот же человек, с одним и тем же уровнем знаний. Но с точки зрения джавы он макака, а с точки зрения Го - эффективный и качественный программист. Охуеть теперь, давайте на бейсике начнем писать.
Go безобразен не тем, что простые вещи в нем делаются просто, это-то как раз хорошо. Но он не позволяет сделать сложно, даже если тебе это реально надо и так будет лучше.
>>485029 У тебя какой-то логический фейл сплошной в твоем псте. Получение работы в %companyname% как и languagename сам по себе не может сделать из макаки программиста. Программист должен понимать принципы программирования и всю хуйню, иначе думать и решать проблемы всё равно придётся хорошему 35-летнему программисту и тимлиду Васе.
Гуглу хорошо, у него есть некоторое количество Вась, а вот у тебя-то их нету. И когда схлынет первый хайп - "о, я могу погромировать, это же так ПРОСТ" и попрут проблемы, Васи не будет рядом, а ты так ничему и не научился, тебе язык не дал ничего.
И ты будешь смотреть на зарплату Васи и думать, где же ты проебался всё-таки?
Как говорится, complex problems do not have simple solutions. Мы это уже проходили с С же, ну.
>>485035 > Разве Гугл не берет на работу лучших программистов в мире? Common misconception. Такие конторы берут вообще всех подряд же, не зря же они кучу студентов стажируют. Лучших программистов чуть менее чем вообще нихуя. Хороших-то хрен найдешь.
Гошники, объясните вот что. Многие говорят, что Go хорош для web/highload, многие ждут реализации 1.5, который позволит писать под Android NDK и даже под iOS. А вот как системный язык Go стоит рассматривать? Вроде как Роб Пайк сказал, стиле Страуструпа: "Си больше не нужен! Есть Го!", а это, в принципе, может означать, что Go и как системный язык катит? Что думаете? Поясните в чём не прав.
>>486896 Теперь увидел. Лучше бы я этого не видел. У меня странное ощущение от всего этого, особенно когда смотришь в другом окне какой-нибудь build 2015.
>>486901 Пиздец какой-то. В D это за 3 строчки пишется же, и принимает и конечные слайсы и любые итераторы. А у него +-1 пиздец > var ins [1]reflect.Value // Outside the loop to avoid one allocation. И еще хуйни вагон. > Special case for strings, very common.
>>486947 Ты не то читаешь. Самое главное это вывод. >I just use "for" loops. You shouldn't use it either. Все, поцоны, сворачиваем лавку. Божество сказало, что функциональщина не нужна.
>>487017 Вообще-то он серьезно не принимает посветку синтаксиса и не любит моноширинные шревты. Вон выше про акме написано, в нем подсветки нет как раз потому что пайк посчитал, что не нужна.
>>487017 > И он как никогда прав. Функциональщина может и не нужна, но, что бы там всякие Пайки и Гвиды не говорили, map, reduce, where и прочий чейнинг охуительно улучшает читаемость кода, если применять его где надо запросы к данным сложнее sum и min и не сувать вместо всего.
>>487451 > во многих тонкостях языка Но в нормальных языках нет ебанутых тонкостей, сделанных ебанутым на всю голову только чтобы выебнуться, как с план9.
>>487455 Ты тупорылый? При чтении кода - быстрее == лучше. Медленнее == хуже. Хотя кому я объясняю, годауны без проблеска логики в атрофированном мозге пишут 3e8 вместо триста_миллионов потому что короче, зато .map().reduce() - это нет, это от сатаны. Пиздец.
>>487470 > КОДИТЬ, а не заниматься хуепроектированием и "паттернами" Вот из-за таких же дегенератов как ты, вместо нормального подхода к программированию мы имеем тонны говна с хартблидами.
>>487485 >который потом смогу расширять и по мере потребности Маняфантазии диванного теоретика ИТТ. Если ты не работаешь, то хоть всякие failure story почитай про свой MVP что ли.
> целочисленный литерал Схуяли целочисленный? В физике, например, он не целочисленный.
Я тут посмотрел на данные по скорости языка Go... Так вот, он медленнее Java, оказывается. Я то думал, что разрабатывали Go как замену C++, а он работает медленнее Java.
Объясните, может, я чё-то не то посмотрел? Почему Google хочет сменить, например, в Android NDK С++ на Go? Это вообще полный бред, что Go задуман как системный язык? Или он для web?
И тогда, если он только для web, то нахуй он нужен, если есть Python? Я совсем нихуя не понимаю.
PS Если у вас начало вдруг бомбить, знайте - это сообщение не для того, чтобы оскорбить, я ХОЧУ разобраться в вопросе.
>>490539 Предлагаю разобрать по частям все тобою написанное:
>Я то думал, что разрабатывали Go как замену C++, а он работает медленнее Java. Go разрабатывается, как безопасная замена C и не должен работать быстрее Java.
>Почему Google хочет сменить, например, в Android NDK С++ на Go? Потому что NDK позволяет строить максимально производительные С++ приложения для андроида, Go похвастаться таким не может.
>И тогда, если он только для web, то нахуй он нужен, если есть Python? Ты смотришь на вещи, как маленький мальчик. Go действительно можно использовать для веба, потому что он:
а) быстрый; б) очень мало жрет; в) легко скалится (представляешь, как запускают приложения на кластерах или целых dedicated data centers?);
>Python Пайтон, в свою очередь, работает в 20-30 раз медленне Go и много жрет. Скалится питон не то, чтобы плохо, но не так хорошо, как хотелось бы.
>я ХОЧУ разобраться в вопросе. Это очень похвально!
>>490555 Максимальная благодарность тебе за развернутый ответ. Но, получается, что Go годен только для web? Например, в Android NDK лучше и не стоит ждать его?
>>490558 Ну, он не должен работать быстрее Java хотя бы потому что он существует всего-навсего пять лет и реально разрабатывается маленькой командой из десяти человек (тем более, не на фултайме), не считая рандомные патчи от мимопроходящих. Теоретически, Go упирается исключительно в GC. Как только GC в Go будет такой же быстрый, как и в Java — попляшем!
>>490560 >Но, получается, что Go годен только для web? Нет, на нем еще прикольно писать разные server-side утилиты прочий DevOps. >Например, в Android NDK лучше и не стоит ждать его? NDK лучше хотя бы потому что NDK построен на самом надежном и проверенном временем ЯП в мире — С++. Я думаю, что к году эдак 2017-2018, когда скорее всего таки выйдет Go 2, перспектива использования Go на андроиде выйдет на новый уровень.
— Всю кодбазу компилятора перевели на Go — Параллельный GC (уменьшили задержки до 10 мс и обещают давать непосредственно исполняемому коду как минимум 4/5 рантайма), просто ОХУЕННО — Улучшили scalability, эффективность на многоядерной архитектуре значительно возросла — Производительность почти по всем бенчмаркам в среднем возросла на 10-15%, в редких случаях — до 30% — Теперь Go можно собирать под iOS и новые устройства Apple (вроде iWatch), а также под linux/arm64 и openbsd/arm. — Теперь из Go-програм можно собирать shared libraries и собственно линковать их (скажите привет проприетарным библиотекам) — При ручной инитилизации словаря можно не писать каждый раз тип ключа — Утилиту go doc сделали еще более охуенной — Гугловский трейсер (https://github.com/google/trace-viewer) теперь могет анализировать рантайм Go приложений — Go запустили на айфоне! — Добавлена утилита gomobile которая кагбэ намекает в каком русле продолжается разработка мобильной ветки
Что я вам скажу, друзья... Это просто ебанный, мать его, WIN!
>>490663 >4/5 рантайма G1 ссыт вам на лицо >Производительность почти по всем бенчмаркам в среднем возросла на 10-15%, в редких случаях — до 30% Это, прости, JIT запилили или опять цифры с потолка взяли?
>>490663 > Теперь из Go-програм можно собирать shared libraries и собственно линковать их > скажите привет проприетарным библиотекам Что ты несёшь вообще?
>>490663 > Параллельный GC > ОХУЕННО In particular the mutators will have to monitor whether the mark phase is active and if so perform some write barrier work when mutating pointers. Furthermore each mutator will occasionally be asked to suspend and scan its stack. Similar to what we do today, mutator allocation may require the mutator doing sweep work on behalf of the GC. > write barrier > suspend and scan its stack. Пиздец. Просто пиздец.
>>491216 ORLY? Ты понимаешь, что гц это очень специфичная штука, которая использует внутри себя тысячи эвристик и делает, что душа пожелает? И когда ты сравниваешь что-то, к чему примешан гц, то ты фактически сравниваешь хуйню, яблоки с самолетами, блять. У тебя один режим на эоконмию памяти, один на latency и один на throughput, а рантайм адаптивно между ними переключается. Ты сравниваешь уже не код, а то, как всё вокруг чего ты сравниваешь плодит ебучий мусор или переполняет свои локальные буферы аллокации или еще хуй пойми что.
>>491253 Вот они и сравнивают, насколько адекватно в среднем ведет себя рантайм, стандартная библиотека, и т.д. - платформа в целом, в общем. Потому что только это и имеет смысл сравнивать - сферический код без платформы ты никогда нигде не увидишь.
>сравниваешь уже не код Они его и не сравнивают, сравнивается средняя по больнице производительность платформы.
>Покажи бенчмарки с 10-15% пожалуйста Да я вообще мимопроходил, ни разу кода на го не видел.
>>491253 > гц это очень специфичная штука, которая использует внутри себя тысячи эвристик и делает, что душа пожелает? Проигрываю просто в голос уже, хватит.
Пацаны, а какого хуя еще никто не додумался написать для Go какой-то препроцессор или вообще к хуям форкнуть Go и сделать свой Go с блэкджеком и генериками?
>>473014 >В принципе, Go можно использовать везде, где ты стал бы сегодня использовать С (за исключением разных I/O штуковин вроде драйверов) >garbage collector >использовать вместо Си Такая жирнота уже в ОП-посте
Q: Что за проблемы решает Go и нахуй он мне всрался?
A: Go решает большинство проблем C, от которого он изначально отталкивался. Ходят слухи, что инженеры в гугле просто заебались ждать компиляции своих приложений и написали Go, который сам полностью компилируется за 7 секунд. Килл-фичей Go является охуеннейший механизм многозадачности.
Q: ЯННП, так где я стану использовать это твое ебанное весло?
A: В принципе, Go можно использовать везде, где ты стал бы сегодня использовать С (за исключением разных I/O штуковин вроде драйверов) и на всяком хайлоаде. В аспекте производительности Go обсирает Ruby/Python/Node в качестве бэкенда для веб-приложений.
Q: Брат, а эта шняга убьет ебанную джаву?
A: Сложно сказать. Java это очень мощная технология, которая совершенствуется уже далеко не первый год, Go просто слишком молод, чтобы прямо тут и сейчас насрать на рожу Java. Но пройдет какое-то время, Go усовершенствует свой GC, поработает над разными оптимизациями... Впрочем, уже сейчас Go — это достойный соперник Java. Бенчмарки показывают, что оба языка идут достаточно плотно. Но одно можно сказать наверняка, Go не убьет джаву.
Q: Так, блять, я не понял, а классы то они когда прикрутят?
A: На самом деле, классы — это лишь синтаксический сахар поверх самой концепции ООП. Философия Go лежит в том, что ты работаешь с данными "не отходя от кассы" избегая лишней возни с горой типов и наследственной архитектуры (читай: Java). На самом деле, использовать техники императивного программирования (aka C-way) и работать с сырыми данными — охуеннее, чем может показаться на первый взгляд.
Q: Так, а он вообще много умеет, этот твой Go?
A: Не смотря на малый возраст этого ЯП, он обладает обширной стандартной библиотекой — http://golang.org/pkg/. Криптография, модули для работы с файловой системой, HTTP, JSON, базы данных, криптография, архивация и многое другое. За последние несколько лет сообщество сильно окрепло и появилась хуева туча 3rdparty модулей для Go. Как только ты разберешься с development workflow, то поймешь, что установка любого из них выполняется одной командой ;)
Q: Хорошо, а с чего начинать?
A: Трепетно разберись с разделами отсюда http://golang.org/doc/ и когда ты будешь готов писать Go код, то обратись к этому ресурсу: https://gobyexample.com/. Если у тебя будут возникать такие вопросы, в которых StackOverflow тебе не поможет, можешь смело обращаться к нам!
Viva la Go!