LINUX.ORG.RU
ФорумTalks

Я расслаблен, когда занимаюсь кодингом на Go

 , ,


0

1

На реддите появилась забавная заметка с таким заглавием: «Coding in golang relaxes me».

А и в самом деле. Нет чувства, что ты борешься с языком, ты просто «выращиваешь» решение задачи. Go помогает в решении, ориентируя мысль сразу в нужном направлении. Он поощряет маленькие функции, даёт свободу в структурировании файлов проекта (не дай божок в Питоне создать файл с таким же именем, как модуль в stdlib! Или в Джаве каждый класс, сучара, должен жить обязательно в отдельном файле!). Казалось бы, это всё мелочи, но в итоге разработка на Go оказывается весьма приятным и «отдыхательным» занятием.

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

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

Убогий же совсем, я конешн не спорю что чистый...

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

Предлагается лепить такой же как в си-шке бойлерплейт и лапшу

Обработка ошибок трудна в любом языке. Go хотя бы позволяет применить идиому «Error is Value», что невозможно в C из-за отсутствия спец. типа для ошибок.

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

Обработка ошибок трудна в любом языке.

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

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

Был плохой опыт с perl?

Да какая разница, плохой или нет. Языки устаревают. Человекочитаемость приобретает всё большее значение. Поэтому всё, что ей мешает, в частности включение признака типа в имя переменной, отметается.

Потому, кстати, обречены языки, страдающие от feature bloat. Это C++, Java, Scala, Rust и т.п. Говорят, например: «да, невозможно знать весь C++, так пишите на подмножестве». Но проблема в том, что в работе читать код не менее нужно, чем писать. И какой-нибудь любитель мозголомных трюков эффективно блокирует работу всей команды. Вот показательная история (кодер наваял на Скале хрень и ушёл в отпуск): https://habr.com/ru/post/273535

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

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

Зато есть уверенность, что обработаны все ошибки. В типичном коде с исключениями, блоками try и catch такой уверенности нет. Попытка с checked exceptions в Java окончилась полным провалом: люди просто отказываются писать гигантские бороды спецификаторов и обработчиков и просто конвертируют в unchecked. Как это сказывается на качестве кода — понятно.

hbee ★★★★
() автор топика

Ну ты и дичь несешь, С++ обречен, исключения чисто для обработки всех ошибок...

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

Ну ты и дичь несешь

Так мы на лоре или где :)

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

Зато есть уверенность, что обработаны все ошибки.

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

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

Разреженность коду не вредит

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

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

Успешные гоферы катаются на метро как последние нищеброды!

Понятие успешности относительно :). Самое счастливое время у меня было, когда, накопив некоторую финансовую подушку, я включился на зарплате в 15 тыр в одну околонаучную разработку. С какими людьми общался! Правда, хватило всего на год, безжалостная материальность потребовала своего.

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

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

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

речь шла про конкурентность, а последовательное выполнение задач в одном потоке это немного другая штука

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

Вот интересная статья об опыте реализации MergeSort на Go. Этот алгоритм вообще как будто создан для параллелизации, поэтому позволяет наглядно проиллюстрировать техники Go: https://hackernoon.com/parallel-merge-sort-in-go-fe14c1bc006

Бенчмарки показывают, что потоки используются полностью.

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

Я вижу там упоминание пакета sync, ок это тянет на конкурентность.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)

Нет чувства, что ты борешься с языком,

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

Потом другая проблема, неспособность мыслить за пределами абстракций _любимого_ языка.

Aber ★★★★★
()
Ответ на: комментарий от ya-betmen

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

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

Когда у языка есть фундаментальные ограничения, например GIL, с языком всё равно борешься, даже если уже давно знаешь как победить.

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

Им не всё равно, кто будет жвачку от мрамора отскребать?

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

В Екб, например, такое лето, что я ещё только пару недель нормально ездил. То ливни, то холод вплоть до снега, который несколько дней не таял. А в метро сухо и тепло.

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

Умные люди давно поняли, что исключения оказались страшным злом.

О, ещё один болезный. А можно пример привести хотя-бы парочки таких «умных» людей (и желательно сразу со списком достижений) ?

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

А можно пример привести хотя-бы парочки таких «умных» людей

В принципе, сам дизайн языка Go можно рассматривать как мощное высказывание против исключений :). Отцы-основатели — Ken Thompson, Rob Pike и Robert Griesemer — известнейшие хакеры. Линус Торвальдс высказывался против исключений. И вообще обоснованной критики исключений можно найти очень много в сети. Чтобы высказать умную мысль, человеку не обязательно быть известным (и наоборот).

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

Go хотя бы позволяет применить идиому «Error is Value», что невозможно в C из-за отсутствия спец. типа для ошибок.

Без паттерн‐матчинга и монад это — пук в пустоту.

siegment
()

Я вообще не в теме, скажите, как у Гошки со скоростью в сравнении с С, С++, Растом?

Deleted
()
Ответ на: комментарий от ya-betmen

А зачем тебе в Go создавать тред? Делаешь горутину, и всё делается за тебя.

Это не язык «однопоточный», это у тебя запросы неправильные.

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

как у Гошки со скоростью в сравнении с С, С++, Растом?

Самому стало интересно (так-то я не заморачивался, для моих задач скорости хватает). Принято считать, что «в среднем по больнице» программа на Go вдвое медленнее эквивалентной программы на C/C++.

Есть, конечно, конкретные замеры. Например: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go-gpp.html

Интересно, почему такой провал в операциях с бинарным деревом. Может быть, из-за выделения памяти под узлы: в C++-версии используется пул объектов в заранее выделенном большом куске памяти.

hbee ★★★★
() автор топика

Мне кажется мы увидели рождение новой копипасты. Так пускай же начнется народное творчество

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

Ага, и ещё если говорить ЛОР-спиком, то если кто-то не согласен или описывает что-то со стороны другой перспективы, или даже просто ошибается, то он «врёт».

«У меня не работает PulseAudio - Врешь!»

Никогда не мог понять этого редкого диалекта.

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

Потому, кстати, обречены языки, страдающие от feature bloat. Это C++, Java, Scala, Rust

Нет в растишке никакого feature bloat. В питоне и то уже больше фич наворотили, и ничо, все довольны и просят ещё.

В растишечке наоборот фич не хватает, даже async/await до сих пор в глубокой альфе.

Pacmu3ka
()

Я не напрягаюсь когда пишу на асме, сях и скале.

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

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

nihirash ★★★
()

Если ты чётко понимаешь, что пишешь и зачем, то особого напряга и так нет. Если дедлайн не на носу 🤓. Язык вторичен.

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

Умные люди давно поняли... Просто пока большинство боится

умные, но трусливые

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

Допустим, типичный повод выкинуть исключение - создали запрос на выделение динамической памяти под переменную, но ОЗУ закончилось и создание переменной стало невозможно.

Что и как вы собираетесь обрабатывать в месте возникновения?

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

Тут дело вот в чём. Я не зря просил указать «список заслуг». Линус, конечно, великий человек. Но какие могут быть исключения в системном программировании на языке C ? Да ещё и в ядре ?

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

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

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

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

Отцы-основатели — Ken Thompson, Rob Pike и Robert Griesemer — известнейшие хакеры.

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

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

Что и как вы собираетесь обрабатывать в месте возникновения?

Если что-то нельзя полезно обработать в месте возникновения, ошибка передаётся наверх по стеку. В случае нехватки памяти дело, вероятно, кончится паникой (впрочем, не проверял).

if err != nil {
    return err
}

Самый знаменитый код на Go :). https://pbs.twimg.com/media/DCIF7-2W0AEAv9c.jpg

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