Re[2]: Ну да, ну да...
От: Sheridan Россия  
Дата: 06.05.24 13:32
Оценка: :))) :)
Здравствуйте, Sharov, Вы писали:

S>>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.

S>Очень не глупо -- никаких проблем с деплоем. Где-то читал, что весь фб это один бинарь под 1гб.
S>Когда-то было, вроде. Т.е. простота деплоя -- закинул файл и запустил.

Ловишь зеро-дай уязвимость в либе. Разработчик либы сорцы починил. А ты вынужден идти на поклон к программистам, которые в соседнем часовом поясе в tfs себе на месяц вперёд задач нарезали. В итоге вместо обновления зависимой библиотеки стандартными способами подпрыгиваешь по ночам в ожидании когда же программисты скомпилят свежий релиз с пофиксеной уязвимостью.
Matrix has you...
Re[3]: Go
От: vsb Казахстан  
Дата: 07.05.24 09:36
Оценка: 1 (1) +1 :)
Здравствуйте, CreatorCray, Вы писали:

vsb>>Ровно один минус — обработка ошибок через возрат значений вместо исключений. В остальном мне всё очень нравится.

CC>Такое ощущение что у тебя обработка ошибок делается через catch (...) на саааамом верху, ибо в нормальном мире, где failure is an option обрабатывать обычные ошибки исключениями уж очень неудобно.

У меня она вообще никак не делается для 99% ошибок. Она делается во фреймворке, на самом верху, да. И это удобно. Лучший код это тот код, который не пришлось писать.

И в пресловутом го 99.9% ошибок обрабатываются ровно так же — на самом верху. А во всех остальных местах просто return err
Отредактировано 07.05.2024 9:39 vsb . Предыдущая версия . Еще …
Отредактировано 07.05.2024 9:38 vsb . Предыдущая версия .
Re: Go
От: pagid_ Россия  
Дата: 06.05.24 03:07
Оценка: +3
Здравствуйте, Sheridan, Вы писали:

S>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.

Не только не глупо, но и правильно. Особенно по сравнению с раскидыванием какашек по диску в этом вашем linux way

S>2. Отсутствие ООП — хорошо (поощряет linux way, то бишь написание простых инструментов). НО. Какого лингама? Вдобавок какое-то подобие ООП там таки есть

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

S>3. Прибитый гвоздями синтаксис для единого стиля — хорошо.

Плохо.

S>Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи

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

S>4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.

Ну там же при каждой компиляции оно не лезет туда и не тащится заново. Импортируется только первый раз. Если правильно понимаю.
Re[3]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.05.24 23:21
Оценка: 3 (2)
Здравствуйте, m2user, Вы писали:

Pzz>>Я пишу на нём системный софтварий.


M>Я недавно в теме про Carbon lang интересовался разработкой библиотек на Go с целью использования их из других ЯП.

M>И вроде как способ есть и с примерами, но судя по комментам есть какие-то препятствия?
M>https://rsdn.org/forum/flame.comp/8731366.1
Автор: pagid_
Дата: 14.04 17:03


На Go можно делать вполне приличные C-callable DLL-ки. Но есть один нюанс, который всё портит. Дело в том, что в одном процессе два рантайма Go ужиться не могут. Причем они не подерутся с треском, что было бы хить понятни, а тихой сапой выцарапают друг другу глаза.

Поэтому пока такая DLL-ка в процессе одна, все ОК. А если их несколько, или если сам процесс Go-шный, начинаются непонятные глюки. Да еще и разные, в зависимости от OS.
Re: Go
От: Константин Б. Россия  
Дата: 06.05.24 05:36
Оценка: 2 (1) +1
Здравствуйте, Sheridan, Вы писали:

S>Собственно, а как вы относитесь к G0?


Очень хорошо. Особенно радует правильно сделанная асинхронщина.

S>Моё отношение — прикольная штука, но противоречивая.

S>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.

Ну тут либо один бинарник, либо один докер-образ.

S>2. Отсутствие ООП — хорошо (поощряет linux way, то бишь написание простых инструментов). НО. Какого лингама? Вдобавок какое-то подобие ООП там таки есть


Да есть там ООП. (Отсутствие ООП никого ни к чему не поощряет)

S>3. Прибитый гвоздями синтаксис для единого стиля — хорошо. НО. Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи


Да вообще плевать к чему там сишники привыкли.

S>4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.


Ага щас. У многих даже во время деплоя не зазорно лезть в интернет за зависимостями.
Re[5]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.05.24 06:17
Оценка: 2 (2)
Здравствуйте, m2user, Вы писали:

M>А ведь фичу сделали ещё в 2013 г., но с тех пор так и не убрали это ограничение.

M>https://github.com/golang/go/issues/65050#issuecomment-1885540619
M>

M>For plugins at load time it takes extra steps to find exisiting Go runtime(s) and attach various metadata (tables) to the existing ones.
M>For c-shared build mode, it currently doesn't do that. I think there is no fundamental reason that this couldn't be done. But it needs time to make it work.


Собрать вместе, наверное, сложно. Потому, что разные версии рантайма могут использовать разные внутренние форматы.

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

И я туда как-то раз заглянул N лет назад. Проблема в том, как гошный рантайм добирается до thread-local storage системных нитей. Они там хитрые ребята, на используют публичных интерфейсов, а знают, где ось хранит дескриптор нити, его формат и в какое место в него вписаться. Но место это в дескрипторе нити одно, что в линухе, что в венде, и если системная нить может побывать в двух рантаймах, то тут-то они за это место и подерутся.

Вот. И доделать эту изиляцию не кажется столь уж невозможным, и не должно вроде это и произвидилельность особо просадить, но дальше надо уже довольно далеко вглубиь копать, а у меня руки не дошли...
Re[2]: Go
От: CreatorCray  
Дата: 06.05.24 09:54
Оценка: +1 -1
Здравствуйте, LaptevVV, Вы писали:

LVV>Хотя вначале мне именно это не пнравилось. Как это открывающая скобка прибита в первой строке?!!!!

Лично для меня такие закидоны — признак хренового языка.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Go
От: student__  
Дата: 06.05.24 10:31
Оценка: +2
Здравствуйте, Sheridan, Вы писали:
S>linux way

нет никакого "linux way", есть UNIX-way, принципы сформулированы Эриком Реймондом, касаются общей философии создания прикладных систем в UNIX и конкретно командных утилит.
Он жив и здравствует, вообще никак не диктует парадигму программирования, конкретный ЯП и так далее, будь там ООП или монады или ещё хрен знает какие асинки.

На этом вспуки в сторону Линукс в этой теме можно завершить.
Re[2]: Go
От: Sheridan Россия  
Дата: 06.05.24 13:27
Оценка: :))
Здравствуйте, student__, Вы писали:

__>Здравствуйте, Sheridan, Вы писали:

S>>linux way

__>нет никакого "linux way", есть UNIX-way, принципы сформулированы Эриком Реймондом, касаются общей философии создания прикладных систем в UNIX и конкретно командных утилит.

__>Он жив и здравствует, вообще никак не диктует парадигму программирования, конкретный ЯП и так далее, будь там ООП или монады или ещё хрен знает какие асинки.

А если не отвлекаться на придирки к терминам и подумать, то можно понять, что усложнение кода, вызванное отсутствием нормального ООП, поощряет написание небольших инструментов, каждый их которых выполняет только одну задачу. Тупо потому что не развернёшься особо без ООП, условный комбайн типа неробурнингрома будет написать чертовски сложно.
Matrix has you...
Re[2]: Go
От: Anton Batenev Россия https://github.com/abbat
Дата: 07.05.24 15:05
Оценка: :))
Здравствуйте, Pzz, Вы писали:

Pzz> Пайк где-то писал, что форматирование в Go не нравится никому, но наличие единого стиля форматирования нравится всем.


А мне нравится. И форматирование и то, что оно едино. Правда одно невозможно без другого. Наконец-то можно забить на tab vs space, CamelCase vs Snake case (стандартный линтер не ругается => идите лесом), количество отступов и вот это все и сосредоточиться на бизнес-задачах.
Re[5]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.24 07:53
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Скорее всего — это особенность всего сообщества Си-подобных программистов.

LVV>При этом Go народ вполне себе принимает.

Go — забавный язык, с точки зрения сишника.

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

Все это открывает не менее интересные возможности, чем common-блоки в Фортране. Не знаю даже, как бывшие Питонисты во всем этом выживают.

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

Или, к примеру, если ты добавляешь записи в map, но забываешь их оттуда удалять. Они ж сами никуда не исчезнут и будут занимать память. Так можно сделать утечку памяти в языке со сборщиком мусора. В Питоне так тоже можно, кстати. И в JS.

Хороший язык, в общем, не даёт соскучиться.
Re: Go
От: LaptevVV Россия  
Дата: 06.05.24 05:33
Оценка: +1
S>Собственно, а как вы относитесь к G0?
Сначала он мне не понравился.
Но за неделю осилив Кернигана-Донована, я проникся.
S>Моё отношение — прикольная штука, но противоречивая.
S>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.
Нет.
Работает всегда/везде/по любому поводу. Ничего внешнего не нужно.
S>2. Отсутствие ООП — хорошо (поощряет linux way, то бишь написание простых инструментов). НО. Какого лингама? Вдобавок какое-то подобие ООП там таки есть
ООП есть и нормальное. Нет только наследования. Типа обходитесь композицией.
S>3. Прибитый гвоздями синтаксис для единого стиля — хорошо. НО. Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи
Это чуть ли не главное достижение. Весь код выгляит абсолютно одинаково. Хоть в гугле, хоть в Астрахани.
Единый стиль.
Хотя вначале мне именно это не пнравилось. Как это открывающая скобка прибита в первой строке?!!!!
Но потом оценил — студенты осваивают просто влет.
S>4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.
Ну, наверноге ссылки можно же не только на гитхаб делать ?

Но в Го еще Го-рутины есть — это просто пестня для начинающих!

Молодцы Керниган и Пайк. Сделали для простого сермяжного программера то, что доктор прописал!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Go
От: Doom100500 Израиль  
Дата: 06.05.24 05:36
Оценка: +1
Здравствуйте, pagid_, Вы писали:

S>>3. Прибитый гвоздями синтаксис для единого стиля — хорошо.

_>Плохо.

S>>Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи

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

Да нихрена! Мне намного проще прыгнуть в саму библиотечную функцию и код посмотреть, чем доки читать.
А теперь почитайте какой-нибудь boost.
Спасибо за внимание
Re[2]: Go
От: LaptevVV Россия  
Дата: 06.05.24 05:37
Оценка: -1
S>>3. Прибитый гвоздями синтаксис для единого стиля — хорошо.
_>Плохо.
S>>Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи
_>Полностью согласен. Не только раздражает, но и увеличивает трудозатраты и время на понимание кода.
Вот нифига не увеличивает.
Это если тебе одновременно надо читать С/С++, Питон, Go — то переключаться надо.
А если постоянно с ГО, то как раз одинаково всегда и везде — облегчает чтение.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Go
От: pagid_ Россия  
Дата: 06.05.24 07:41
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>Вот нифига не увеличивает.

LVV>Это если тебе одновременно надо читать С/С++, Питон, Go — то переключаться надо.
LVV>А если постоянно с ГО, то как раз одинаково всегда и везде — облегчает чтение.

А если так. Вот авторам чем-то не угодила точка с замятой, и они избавились от необходимости её использовать, мне непонятно зачем, фетиш видимо у них такой, но дело безусловно хозяйское — авторское.
Но тогда же получается, что и открывающаяся фигурная скобка избыточна! Что ж её не отменить? Может немного подправив синтаксис,они авторы, почему нет. Оно же наверно того стоит, тем более, что синтаксически она получилась не особо нужноа, а визуально только мешает. Помнишь наверно как Вирт на каком-то этапе своего пустопорожнего творчества, в Модуле или Модуле-2, избавился везде или почти везде от begin просто завершая любую конструкцию end Что за маразм, только закрывающиеся скобки? Да маразм, и сейчас оно по сути так и выглядит
Ах да, отступы и ... Питон. Не буду на нем писать, если не заставят и не заманят, но вряд ли. Но это субъективно и на большее не претендую, и при этом признаю, что в нем хотя бы эта идея законченная и целостная. А отличие от уродливого K&R стиля расстановки фигурных скобок, особенно в натужной его реализации в Go
Re: Go
От: Sharov Россия  
Дата: 06.05.24 10:25
Оценка: :)
Здравствуйте, Sheridan, Вы писали:

S>Собственно, а как вы относитесь к G0?

S>Моё отношение — прикольная штука, но противоречивая.
S>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.

Очень не глупо -- никаких проблем с деплоем. Где-то читал, что весь фб это один бинарь под 1гб.
Когда-то было, вроде. Т.е. простота деплоя -- закинул файл и запустил.
Кодом людям нужно помогать!
Re: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 14:06
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>Собственно, а как вы относитесь к G0?


Я пишу на нём системный софтварий.

S>Моё отношение — прикольная штука, но противоречивая.

S>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.

Зато деплоить очень удобно. Собрал всё в одну кучку, и никаких внешних зависимостей.

S>2. Отсутствие ООП — хорошо (поощряет linux way, то бишь написание простых инструментов). НО. Какого лингама? Вдобавок какое-то подобие ООП там таки есть


Я не понял твой вопрос.

S>3. Прибитый гвоздями синтаксис для единого стиля — хорошо. НО. Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи


Пайк где-то писал, что форматирование в Go не нравится никому, но наличие единого стиля форматирования нравится всем.

S>4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.


Есть такое дело, да. Не только безопасники, но и сборщики дистрибутивных линухов.
Re[3]: Ну да, ну да...
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 14:19
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>Ловишь зеро-дай уязвимость в либе. Разработчик либы сорцы починил. А ты вынужден идти на поклон к программистам, которые в соседнем часовом поясе в tfs себе на месяц вперёд задач нарезали. В итоге вместо обновления зависимой библиотеки стандартными способами подпрыгиваешь по ночам в ожидании когда же программисты скомпилят свежий релиз с пофиксеной уязвимостью.


Агащазблин. В любой конторе, в которой используются динамические либы, никто не даст тебе просто так подменить либу на продакшене. Все равно придется перезаливать всё, в лучшем случае — докеровский образ.
Re[2]: Go
От: vdimas Россия  
Дата: 06.05.24 15:34
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Уже пишут что Dart они закрывают.


А где и когда пишут?
А то только недавно версия 3.3 вышла.
Да и, в этом году различных индексах популярности языков поднялся на 3-4 места, в некоторых индексах вошёл в десятку, вытеснив Котлин.
Re[4]: Go
От: Farsight СССР  
Дата: 06.05.24 17:19
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S>Здравствуйте, Sharov, Вы писали:


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

Так изоляция — это одна из целей
</farsight>
Re[5]: Go
От: Sheridan Россия  
Дата: 06.05.24 18:37
Оценка: :)
Здравствуйте, Farsight, Вы писали:

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

F>Так изоляция — это одна из целей
Я непротив изоляции. Я против когда изоляция — цель использования контейнеров. Я когда такое вижу — сразу понимаю: проект писался абы как, используемые либы — древнее говно мамонта, ибо обновлять их никто и не думал. В современном дистрибутиве без контейнера софт вряд ли запустится.
Matrix has you...
Re: Go
От: Anton Batenev Россия https://github.com/abbat
Дата: 07.05.24 15:05
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

S> Моё отношение — прикольная штука, но противоречивая.


Там нет никаких противоречий. Язык рассчитан на современную инфраструктуру (читай "k8s"), современные методы разработки (читай "Release early, release often" или по-русски "фигак-фигак-продакшен"), минимальный порог входа (читай "наймите 9 джунов и за месяц они родят ребенка"), минимальное отвлечение на незначащие детали типа форматирования и т.д.

Для своей ниши и своего времени язык практически идеален. И более того, уделывает в своей нише (web, console) практически всех левым мизинцем.
Re[4]: Go
От: CreatorCray  
Дата: 07.05.24 22:03
Оценка: +1
Здравствуйте, SkyDance, Вы писали:

SD>Мне при виде такого сразу хочется руки оторвать тем, кто не понимает, что такое "обработка ошибок".

Ну давай, покажи класс: большой стек вылетел потому что где то в глубине сибирских руд pread вернул ENOENT.
Где, какой, что делалось, что читалось, зачем?

SD>Если так уж вышло, что только на самом верху ошибку можно обработать, то именно там и надо ставить catch.

И протерять все внутренние состояния, которые ой как нужны когда всё что до тебя долетело это обугленные и дымящиеся ошмётки жопы пользователя логи.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Go
От: CreatorCray  
Дата: 07.05.24 22:03
Оценка: +1
Здравствуйте, SkyDance, Вы писали:

SD>В процессе пролета будет накоплен стек

Этого крайне мало. Надо куда больше контекста.
Более того сие нихрена не работает в компилируемых языках с оптимизаЙцией и инлайнингом.

SD> так что когда исключение наконец-то поймано, есть вся необходимая информация.

Да хрен там плавал.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Go
От: CreatorCray  
Дата: 08.05.24 07:04
Оценка: +1
Здравствуйте, SkyDance, Вы писали:

SD>На вершине этого стека уже есть информация о том, что за файл читается. Если, скажем, это какой-нибудь RPC, там известно, куда лезут и зачем.

Хрен там.

SD> Пишут во всякие там глобальные переменные

Ты забываешь про диск, сеть, shared memory, etc

SD>Так что если ты retry-ишь, результат совсем иной получается?

Лехко! Файл не локальный, какой файл надо открывать выясняется в результате RPC, и за ним лезут куда то в SAN через NFS. Куда именно — знает только функция дайте_мне_чего_то_там у себя внутри. И если не ловить и не логить внутри неё ошибки промежуточных стадий с контекстом этих самых стадий то наверх прилетит только "нишмагла" от чего пользы никакой совершенно.

SD>А если функции таки чистые (pure)

Т.е. ошибка таки ловится на каждой подфункции а не где то вверху со всех скопом?

SD>имени файла, на который будет сказано ENOENT.

Не на имя файла а конкретно из pread, реальный случай межжупрочим.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Go
От: SkyDance Земля  
Дата: 09.05.24 04:01
Оценка: :)
CC>Она тебе выдаст одинаковый ответ, но получить его внутри может по разному. И свалиться внутри может тоже по разному.

Еще раз: функция либо детерминированная, либо зависит от побочных эффектов. Если там "по-разному", суть детерминированность отсутствует, то или ее нужно зарефакторить (если это кишочки, которые не поросли контрактами API) и сделать детерминированной. Если же контракт гвоздями прибит — вырвать волос с головы проектировщика за такой "дизайн", и, увы, перехватывать пролетающее исключение (оно может быть как в виде ли исключения, так return code, который по сути есть проносимое врукопашную исключение) в целях дальнейшего его проброса с дополнительными данными о том, что именно пошло недетерминированно, и почему.

CC>Банальные коды ошибок с логгингом сразу по месту возникновения и пробросом наверх прекрасно справляются.


То есть ты вместо хорошего детерминированного дизайна снова полагаешься на побочные эффекты ("логирование"). И если оно сломано, отфильтровано или засемплировано, — good luck debugging. Нет, это хреновый дизайн. В хорошем дизайне функции работают детерминированно, и из результат зависит только от входных данных. Где это невозможно (скажем, нужно что-то прочитать из другой системы), приходится добавлять метаданные в пролетающее исключение (типа, "спросили у другой системы какой-то параметр, она в тот момент вернула ХХХ").

CC>В куда бОльшем колве мест.


Нет, только в недетерминированных функциях. Которые, кстати, давно уже объявлены злом. Только совсем уж дремучие кодеры не в курсе про функциональный подход.

CC>Для начала многие сложные функции внутри data driven, для разных данных ведут себя сильно по разному, но данных этих у тебя нет и по privacy причинам быть не может.


Да чем бы они ни были driven, или функция чистая (pure), то есть зависит только от входных данных, либо нет. Если это вынужденная грязь, то либо рефакторинг, либо продолжай ставить подпорки (добавлять метаданные).

CC>Добро пожаловать в реальный мир.


Это не реальный мир, а строго огороженные вольеры в зоопарке К счастью, в современном мире есть куда более надежные и качественные подходы к проектированию. Но, понятно, застрявшие во времена "классной сишечки", этак середины 80х, вряд ли смогут осознать.
Re[4]: Go
От: ononim  
Дата: 09.05.24 21:11
Оценка: :)
Pzz>> от обилия восклицательных знаков
A>Раст для девочек?
хуже
ну или так
Как много веселых ребят, и все делают велосипед...
Отредактировано 09.05.2024 21:14 ononim . Предыдущая версия .
Re[2]: Go
От: uncommon Ниоткуда  
Дата: 12.05.24 04:13
Оценка: +1
Здравствуйте, rudzuk, Вы писали:

R>Go — тормозное гамно
Автор: rudzuk
Дата: 16.07.23
с конченым синтаксисом. Еще и исключений нет 🤮


Поразительно, насколько код по ссылке на Паскале выглядит чище и читабельне кода на Го. Сам с Го не сильно знаком, просто бросилось в глаза.
Go
От: Sheridan Россия  
Дата: 05.05.24 22:46
Оценка:
Собственно, а как вы относитесь к G0?
Моё отношение — прикольная штука, но противоречивая.
1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.
2. Отсутствие ООП — хорошо (поощряет linux way, то бишь написание простых инструментов). НО. Какого лингама? Вдобавок какое-то подобие ООП там таки есть
3. Прибитый гвоздями синтаксис для единого стиля — хорошо. НО. Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи
4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.
Matrix has you...
Re: Go
От: Shmj Ниоткуда  
Дата: 05.05.24 22:51
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Собственно, а как вы относитесь к G0?

S>Моё отношение — прикольная штука, но противоречивая.

Это же поделка Гугла. Уже пишут что Dart они закрывают. Оно вам нада?
Re: Go
От: rudzuk  
Дата: 06.05.24 00:01
Оценка:
Здравствуйте, Sheridan, Вы писали:

S> Собственно, а как вы относитесь к G0?


Go — тормозное гамно
Автор: rudzuk
Дата: 16.07.23
с конченым синтаксисом. Еще и исключений нет 🤮
avalon/3.0.2
Re: Go
От: falconandy  
Дата: 06.05.24 06:49
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.


Vendoring

When vendoring is enabled, build commands like go build and go test load packages from the vendor directory instead of accessing the network or the local module cache. The go list -m command only prints information about modules listed in go.mod. go mod commands such as go mod download and go mod tidy do not work differently when vendoring is enabled and will still download modules and access the module cache. go get also does not work differently when vendoring is enabled.

Отредактировано 06.05.2024 6:52 falconandy . Предыдущая версия .
Re[2]: Go
От: Sharov Россия  
Дата: 06.05.24 10:25
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>Собственно, а как вы относитесь к G0?

S>>Моё отношение — прикольная штука, но противоречивая.
S>Это же поделка Гугла. Уже пишут что Dart они закрывают. Оно вам нада?

Как минимум docker придется выкинуть, и, скорее всего, k8. Тут явно больше пользователей, чем у самого Го.
Кодом людям нужно помогать!
Re: Go
От: Разраб  
Дата: 06.05.24 13:18
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Собственно, а как вы относитесь к G0?


несмотря на то что его позиционируют как наследника виртовского оберона,
я несколько раз смотрел на ситнаксис гоу но так и не проникся,
если уже выбирать на будушее то либо раст либо зиг.
ди почему-то не в почете, хотя по опыту оберон сборщик мусора уже давно не так плохо
но видимо репутация работает против
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Go
От: Sheridan Россия  
Дата: 06.05.24 13:33
Оценка:
Здравствуйте, Sharov, Вы писали:


S>Как минимум docker придется выкинуть, и, скорее всего, k8. Тут явно больше пользователей, чем у самого Го.

В большинстве случаев докеры с кубами выкинуть можно, ибо используются тупо для изоляции.
Matrix has you...
Re: Go
От: reversecode google
Дата: 06.05.24 13:43
Оценка:
гугл сделал для своих нужд себе спец язык
а все слонопуки решили сразу им забивать всевозможные гвозди
нужды гугла это микросервисы

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

язык го говно
но свое назначение оправдывает

вообще на форуме уже обсуждали это, ищите перечитайте
Re[2]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 14:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>Собственно, а как вы относитесь к G0?

S>>Моё отношение — прикольная штука, но противоречивая.

S>Это же поделка Гугла. Уже пишут что Dart они закрывают. Оно вам нада?


Это поделка не Гугла, а Роба Пайка. Как Си, например, UNIX, Plan9...

То, что конктрено за эту поделку заплатил гугл, ну, Пайк молодец.
Re[2]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 14:13
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>Go — тормозное гамно
Автор: rudzuk
Дата: 16.07.23
с конченым синтаксисом. Еще и исключений нет 🤮


Как выяснилось, тормоза там были не от Go, а от того, что не только лишь все умеют в sqlite.
Re[3]: Go
От: rudzuk  
Дата: 06.05.24 15:13
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz> Как выяснилось, тормоза там были не от Go, а от того, что не только лишь все умеют в sqlite.


Где выяснилось?
avalon/3.0.2
Re: Go
От: vsb Казахстан  
Дата: 06.05.24 15:14
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Собственно, а как вы относитесь к G0?


Ровно один минус — обработка ошибок через возрат значений вместо исключений. В остальном мне всё очень нравится.

S>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.


Не обосновано. Что в этом глупого?

S>4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.


Я ничего не понял. В любом пакетном менеджере либы инклудятся через мало контролируемый репозиторий. Что — в maven central по-твоему сложно что-то задеплоить? Не сложно. В npmjs сложно? Да вообще без проблем. Чем вашим безопасникам конкретный гитхаб не угодил? Который за безопасностью следит на вполне достаточном уровне.

А ещё в го есть вендоринг, как раз для таких проблем. Такого удобного вендоринга я ещё нигде не видел.
Отредактировано 06.05.2024 15:15 vsb . Предыдущая версия .
Re: Go
От: Farsight СССР  
Дата: 06.05.24 17:24
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Собственно, а как вы относитесь к G0?

S>Моё отношение — прикольная штука, но противоречивая.
S>1. Запустил 1 файл и работает — хорошо. НО. Вкомпиливать всё в один бинарник глупо.
S>2. Отсутствие ООП — хорошо (поощряет linux way, то бишь написание простых инструментов). НО. Какого лингама? Вдобавок какое-то подобие ООП там таки есть
S>3. Прибитый гвоздями синтаксис для единого стиля — хорошо. НО. Смотрится же вырвиглазно и раздражает тех кто не привык к Керниган/Ричи
S>4. Инклуд либ прямо как ссылок на гитхаб — хорошо. НО. Безопасники за такое рубят пальцы (на ногах) и девопсам приходится поднимать зеркала что выливается в отдельную боль.

Синтаксис блевотный. У Раста приятней, ИМХО.
</farsight>
Re[3]: Ну да, ну да...
От: CreatorCray  
Дата: 06.05.24 18:25
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Ловишь зеро — дай уязвимость в либе.

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

S> Разработчик либы сорцы починил.

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

S>В итоге вместо обновления зависимой библиотеки стандартными способами

Которые регулярно ломают полсистемы.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Go
От: CreatorCray  
Дата: 06.05.24 18:25
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Ровно один минус — обработка ошибок через возрат значений вместо исключений. В остальном мне всё очень нравится.

Такое ощущение что у тебя обработка ошибок делается через catch (...) на саааамом верху, ибо в нормальном мире, где failure is an option обрабатывать обычные ошибки исключениями уж очень неудобно.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Ну да, ну да...
От: Sheridan Россия  
Дата: 06.05.24 18:33
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>Ловишь зеро-дай уязвимость в либе. Разработчик либы сорцы починил. А ты вынужден идти на поклон к программистам, которые в соседнем часовом поясе в tfs себе на месяц вперёд задач нарезали. В итоге вместо обновления зависимой библиотеки стандартными способами подпрыгиваешь по ночам в ожидании когда же программисты скомпилят свежий релиз с пофиксеной уязвимостью.

Pzz>Агащазблин. В любой конторе, в которой используются динамические либы, никто не даст тебе просто так подменить либу на продакшене. Все равно придется перезаливать всё, в лучшем случае — докеровский образ.
Странный продакшн. Видимо костылями подпёртый, раз лишнее движение и всё разваливается.
Matrix has you...
Re[4]: Ну да, ну да...
От: Sheridan Россия  
Дата: 06.05.24 18:41
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>> Разработчик либы сорцы починил.

CC>А она не совместима с версией, которую пользует прога. Так что один хрен пересобирать.
Ну да, ну да. В принципе могу согласиться что бывают идиоты, которые прикрывая уязвимость ломают совместимость. За такое надо отрезать пальцы на ногах. Правильно так: поймали уязвимость — исправили во всех активных релизах, не ломая совместимость.

S>>В итоге вместо обновления зависимой библиотеки стандартными способами

CC>Которые регулярно ломают полсистемы.
Дураку ни в коем случае нельзя давать стеклянный мпх. А остальные своевременно обновляют свои сервера. как раз для того, чтобы установленное обновление через пару лет после последнего обновления не ломало ничего.
Matrix has you...
Re[5]: Ну да, ну да...
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 18:42
Оценка:
Здравствуйте, Sheridan, Вы писали:

Pzz>>Агащазблин. В любой конторе, в которой используются динамические либы, никто не даст тебе просто так подменить либу на продакшене. Все равно придется перезаливать всё, в лучшем случае — докеровский образ.

S>Странный продакшн. Видимо костылями подпёртый, раз лишнее движение и всё разваливается.

Это мы с тобой понимаем, что в хорошо сделанной системе ничего просто так не должно разваливаться. А менеджеры всякие привыкли к программистам, у которых все хрупкое, как из хрусталя, и на всякий случай перестраховываются.
Re[5]: Ну да, ну да...
От: CreatorCray  
Дата: 06.05.24 19:31
Оценка:
Здравствуйте, Sheridan, Вы писали:

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


Современное софтостроение пришло к тому, что с некоторыми вендорами народ порой вообще боится обновляться, ибо хрен его знает что эти косорукие там сломали.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Ну да, ну да...
От: Sheridan Россия  
Дата: 06.05.24 19:46
Оценка:
Здравствуйте, Pzz, Вы писали:

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

У меня от таких погроммистов подгорает постоянно.
Matrix has you...
Re[6]: Ну да, ну да...
От: Sheridan Россия  
Дата: 06.05.24 19:48
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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

CC>Современное софтостроение пришло к тому, что с некоторыми вендорами народ порой вообще боится обновляться, ибо хрен его знает что эти косорукие там сломали.
Поэтому рядом с продом должен быть стэйж.
Matrix has you...
Re[7]: Ну да, ну да...
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 19:58
Оценка:
Здравствуйте, Sheridan, Вы писали:

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

S>У меня от таких погроммистов подгорает постоянно.

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

При этом, заметим, корпоративный стиль разработки и не предполагает существования других программистов (не удивлюсь, если корпорации тоже созданы рептилоидами, но факт этот очень тщательно скрывается).
Re[6]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 20:01
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Я непротив изоляции. Я против когда изоляция — цель использования контейнеров. Я когда такое вижу — сразу понимаю: проект писался абы как, используемые либы — древнее говно мамонта, ибо обновлять их никто и не думал. В современном дистрибутиве без контейнера софт вряд ли запустится.


А зачем еще нужны контейнеры, кроме как для изоляции?

(идею использовать контейнеры, чтобы скрыть свою криворукость, я отвергаю, как несознательную, но отдаю себе отчет, что в реальной жизни это сплошь и рядом).
Re[5]: Ну да, ну да...
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 20:09
Оценка:
Здравствуйте, Sheridan, Вы писали:

CC>>А она не совместима с версией, которую пользует прога. Так что один хрен пересобирать.

S>Ну да, ну да. В принципе могу согласиться что бывают идиоты, которые прикрывая уязвимость ломают совместимость. За такое надо отрезать пальцы на ногах. Правильно так: поймали уязвимость — исправили во всех активных релизах, не ломая совместимость.

Я еще помню скандал, который поднялся, когда в очередной версии glibc поменялось то, с какой стороны копирует memcpy. Казалось бы, никто этого никогда и не обещал, и задевает это только те программы, которые сдуру используют memcpy вместо memmove, однако вот зацепило же некоторых. И среди прочих — adobe flash player, который в те времена был основой динамичного веба и помирать тогда еще не собирался.

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

В этом плане я понимаю авторов Go, которые мало того, что не обещают какой-либо определенный порядок обхода при итерации ассоциативного массива (который в Go называется map), а еще и делают, в ущерб даже и производительности, этот порядок псевдослучайным, разным при каждом вызове.
Re[2]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.05.24 20:11
Оценка:
Здравствуйте, Farsight, Вы писали:

F>Синтаксис блевотный. У Раста приятней, ИМХО.


А у тебя глаз не начинает дергаться от обилия восклицательных знаков, которые в расте торчат отовсюду?
Re[3]: Go
От: Farsight СССР  
Дата: 06.05.24 21:32
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>А у тебя глаз не начинает дергаться от обилия восклицательных знаков, которые в расте торчат отовсюду?


да не особо, четсно говоря. у меня больше глаз дергается от шеридановских загонов про докер и про его идеальный мир программирования с розовыми пони и единорогами. и вот от этого map[int]bool{}
</farsight>
Re[6]: Go
От: Farsight СССР  
Дата: 06.05.24 21:35
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Я непротив изоляции. Я против когда изоляция — цель использования контейнеров. Я когда такое вижу — сразу понимаю: проект писался абы как, используемые либы — древнее говно мамонта, ибо обновлять их никто и не думал. В современном дистрибутиве без контейнера софт вряд ли запустится.


Лыко-мочало — начинай сначала.

</farsight>
Re[7]: Ну да, ну да...
От: CreatorCray  
Дата: 06.05.24 23:29
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>У меня от таких погроммистов подгорает постоянно.

Чем ниже порог входа и чем больше памперсов в языках — тем больше вот таких вот безмозглых будет приходить в профессию
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Ну да, ну да...
От: CreatorCray  
Дата: 06.05.24 23:29
Оценка:
Здравствуйте, Sheridan, Вы писали:

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

S>Поэтому рядом с продом должен быть стэйж.
Это далеко не всегда реализуемо. В разы дешевле не трогать то, что работает.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Ну да, ну да...
От: CreatorCray  
Дата: 06.05.24 23:29
Оценка:
Здравствуйте, Pzz, Вы писали:

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

Это уже совсем дикий маразм какой то
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: Go
От: SkyDance Земля  
Дата: 07.05.24 02:12
Оценка:
CC>Такое ощущение что у тебя обработка ошибок делается через catch (...) на саааамом верху, ибо в нормальном мире, где failure is an option обрабатывать обычные ошибки исключениями уж очень неудобно.

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


try {
  call_something();
} catch (Exception exc)
{
  emit_log("call_something failed with ", exc.reason);
  return Error(exc);
}


И в функции выше что-то типа
var ret = do_work();
if (ret instanceof Error) {
  emit_log("calling do_work failed because of ", ret.exception)
}


Мне при виде такого сразу хочется руки оторвать тем, кто не понимает, что такое "обработка ошибок". Если так уж вышло, что только на самом верху ошибку можно обработать, то именно там и надо ставить catch.
Re[7]: Ну да, ну да...
От: SkyDance Земля  
Дата: 07.05.24 02:17
Оценка:
S>Поэтому рядом с продом должен быть стэйж.

И кто этим "стэйдж" пользуется? Нонче модно "стейдж" устраивать слегка иначе, например, путем выбора "стейдж" страны. Лучше, чтоб та страна была не в противофазе от часового пояса разработчиков. Желательно, чтобы пользователи знали английский (ну или иной родной язык разработчиков, скажем, мандарин). Хорошо бы чтоб страна была примерно от 1% до 5% пользователей.

В общем, мне бедных Киви иногда даже жалко
Re[2]: Go
От: LaptevVV Россия  
Дата: 07.05.24 04:53
Оценка:
Р>несмотря на то что его позиционируют как наследника виртовского оберона,
Не, ну только в части ООП, да и то частично...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Go
От: LaptevVV Россия  
Дата: 07.05.24 04:58
Оценка:
_>Но тогда же получается, что и открывающаяся фигурная скобка избыточна! Что ж её не отменить? Может немного подправив синтаксис,они авторы, почему нет. Оно же наверно того стоит, тем более, что синтаксически она получилась не особо нужноа, а визуально только мешает. Помнишь наверно как Вирт на каком-то этапе своего пустопорожнего творчества, в Модуле или Модуле-2, избавился везде или почти везде от begin просто завершая любую конструкцию end Что за маразм, только закрывающиеся скобки? Да маразм, и сейчас оно по сути так и выглядит
Не. Одну скобку можно потерять на счет раз.
В отличие от ключевого слова.
Но от слов отвыкли в пользу скобок.
_>Ах да, отступы и ... Питон. Не буду на нем писать, если не заставят и не заманят, но вряд ли. Но это субъективно и на большее не претендую, и при этом признаю, что в нем хотя бы эта идея законченная и целостная.
Вот нифига не субъективное.
Сколько знаю профессиональных программеров — никто питон не любит. Точно как у тебя: если ОЧЕНЬ надо, то напишу, а так — не-не-не...
Скорее всего — это особенность всего сообщества Си-подобных программистов.
При этом Go народ вполне себе принимает.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: Go
От: Sheridan Россия  
Дата: 07.05.24 05:07
Оценка:
Здравствуйте, Pzz, Вы писали:

S>>Я непротив изоляции. Я против когда изоляция — цель использования контейнеров. Я когда такое вижу — сразу понимаю: проект писался абы как, используемые либы — древнее говно мамонта, ибо обновлять их никто и не думал. В современном дистрибутиве без контейнера софт вряд ли запустится.

Pzz>А зачем еще нужны контейнеры, кроме как для изоляции?
Быстроразворачиваемое окружение для разработки/тестов
Масштабирование "на лету" aka ввод новых мощностей при увеличении нагрузки (практикуется в облаках)

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

Достаточно увидеть огонь в глазах программиста, до которого в первый раз доходит что в контейнер можно воткнуть старое чтото (либу, компилер, что угодно) и хост при этом будет не против, чтобы понять: лишь массовые публичные розги на городских площадях способны исправить ситуацию
То есть люди осознано идут и подготавливают своим нетленкам тепличные условия. Настолько тепличные, что их софт потом в реальном мире, вне контейнеров, не работает.
Matrix has you...
Re[8]: Ну да, ну да...
От: Sheridan Россия  
Дата: 07.05.24 05:13
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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

S>>Поэтому рядом с продом должен быть стэйж.
CC>Это далеко не всегда реализуемо.
Было бы желание.

CC>В разы дешевле не трогать то, что работает.

Ой, сильно черевато жестоким крахом в будущем, когда таки потрогать придётся. А там мало того что пропасть каньонная между тем состоянием которое там и тем, какое надо, да ещё вдобавок у нетрогательного персонала опыта никакого вообще.
Matrix has you...
Re[8]: Ну да, ну да...
От: Sheridan Россия  
Дата: 07.05.24 05:17
Оценка:
Здравствуйте, SkyDance, Вы писали:

S>>Поэтому рядом с продом должен быть стэйж.


SD>И кто этим "стэйдж" пользуется? Нонче модно "стейдж" устраивать слегка иначе, например, путем выбора "стейдж" страны. Лучше, чтоб та страна была не в противофазе от часового пояса разработчиков. Желательно, чтобы пользователи знали английский (ну или иной родной язык разработчиков, скажем, мандарин). Хорошо бы чтоб страна была примерно от 1% до 5% пользователей.

В серьёзных проектах есть. И не один. И у заказчиков несколько полигонов кроме прода (стейж, для "поиграть", аварийный), и у разработчиков — чуть ли не у каждого свой полигон.

SD>В общем, мне бедных Киви иногда даже жалко

Это те, которые уже всё или есть какие-то ещё?
Matrix has you...
Re[5]: Go
От: pagid_ Россия  
Дата: 07.05.24 05:35
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Не. Одну скобку можно потерять на счет раз.

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

LVV>В отличие от ключевого слова.

Отличие только в том, скобки — парный элемент. Мы к этому привыкли и привыкли по логичным причинам. А так для восприятия, да еще в отдельной строчке end ничем не лучше "}"

LVV>Но от слов отвыкли в пользу скобок.

Ну и замечательно.
Отредактировано 07.05.2024 5:47 pagid_ . Предыдущая версия .
Re[8]: Ну да, ну да...
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.24 07:55
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>>У меня от таких погроммистов подгорает постоянно.

CC>Чем ниже порог входа и чем больше памперсов в языках — тем больше вот таких вот безмозглых будет приходить в профессию

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

Надо не языки переусложнять, а требовать повышения зарплаты в 5 раз. Вот создать профсоюз и требовать. Как докеры в США.
Re[8]: Ну да, ну да...
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.24 07:57
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>И кто этим "стэйдж" пользуется? Нонче модно "стейдж" устраивать слегка иначе, например, путем выбора "стейдж" страны. Лучше, чтоб та страна была не в противофазе от часового пояса разработчиков. Желательно, чтобы пользователи знали английский (ну или иной родной язык разработчиков, скажем, мандарин). Хорошо бы чтоб страна была примерно от 1% до 5% пользователей.


SD>В общем, мне бедных Киви иногда даже жалко


Я слышал, с лекарствами теперь тоже так делают.
Re[6]: Go
От: ononim  
Дата: 07.05.24 09:48
Оценка:
Pzz>Go — забавный язык, с точки зрения сишника.
Pzz>Например, когда в Go из слайса делается сабслайс, они разделяют общую память. Потом, если к исходному слайсу сделать append, он может среаллоцироваться, и тогда память разделится. А может и не среаллоцироваться, если у него места в хвосте было достаточно припасено.
Дада, старый добрый UB, но теперь без SIGSEGV
Как много веселых ребят, и все делают велосипед...
Re[4]: Go
От: Sharov Россия  
Дата: 07.05.24 12:16
Оценка:
Здравствуйте, SkyDance, Вы писали:


SD>

SD>try {
SD>  call_something();
SD>} catch (Exception exc)
SD>{
SD>  emit_log("call_something failed with ", exc.reason);
SD>  return Error(exc);
SD>}
SD>


SD>И в функции выше что-то типа

SD>
SD>var ret = do_work();
SD>if (ret instanceof Error) {
SD>  emit_log("calling do_work failed because of ", ret.exception)
SD>}
SD>


SD>Мне при виде такого сразу хочется руки оторвать тем, кто не понимает, что такое "обработка ошибок". Если так уж вышло, что только на самом верху ошибку можно обработать, то именно там и надо ставить catch.


Ошибки разные бывают. Ну вообще, нужно же ее по месту залоггировать и прокинуть дальше. В managed языках типа явы и дотнет
наверное и цпп, есть механизм throw, которые прокидывает исключение дальше.
В примере catch нужен для логов, кмк.
Кодом людям нужно помогать!
Re[5]: Go
От: SkyDance Земля  
Дата: 07.05.24 17:48
Оценка:
LVV>Не. Одну скобку можно потерять на счет раз.
LVV>В отличие от ключевого слова.

Да все это вопрос привычки. Вместо открывающей скобки может использоваться что-то специфичное, скажем, ключевое слово of:
case get_something() of
  1 -> do_one();
  Many when Many < 100 -> do_many();
  TooMany -> throw("that was too many")
end.
Re[5]: Go
От: SkyDance Земля  
Дата: 07.05.24 17:51
Оценка:
S>В примере catch нужен для логов, кмк.

В том-то и дело что не нужен. Пусть летит себе дальше, до того уровня, где может быть обработана. В процессе пролета будет накоплен стек, так что когда исключение наконец-то поймано, есть вся необходимая информация.
Re[3]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.05.24 19:52
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

Pzz>> Пайк где-то писал, что форматирование в Go не нравится никому, но наличие единого стиля форматирования нравится всем.


AB>А мне нравится. И форматирование и то, что оно едино. Правда одно невозможно без другого. Наконец-то можно забить на tab vs space, CamelCase vs Snake case (стандартный линтер не ругается => идите лесом), количество отступов и вот это все и сосредоточиться на бизнес-задачах.


Тебе нравится наличие единого стиля, а не конкретно этот стиль. Ну, во всяком случае описываешь ты именно это.
Re[5]: Go
От: CreatorCray  
Дата: 07.05.24 22:03
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Не. Одну скобку можно потерять на счет раз.

Разве что если лепить их к коду а не на отдельную строку
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Ну да, ну да...
От: CreatorCray  
Дата: 07.05.24 22:03
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Надо не языки переусложнять

Переусложнять не надо но и переупрощать не надо.

Pzz> а требовать повышения зарплаты в 5 раз.

И губозакаточную машинку

Pzz> Вот создать профсоюз и требовать.

Профсоюзы — зло.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Ну да, ну да...
От: CreatorCray  
Дата: 07.05.24 22:03
Оценка:
Здравствуйте, Sheridan, Вы писали:

CC>>Это далеко не всегда реализуемо.

S>Было бы желание.
И килотонны денег...

CC>>В разы дешевле не трогать то, что работает.

S>Ой, сильно черевато жестоким крахом в будущем, когда таки потрогать придётся.
Зависит.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Go
От: CreatorCray  
Дата: 07.05.24 22:03
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>А во всех остальных местах просто return err

Удачного триажа!
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: Ну да, ну да...
От: Sheridan Россия  
Дата: 07.05.24 23:08
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>>>Это далеко не всегда реализуемо.

S>>Было бы желание.
CC>И килотонны денег...
Зеттатонны, ага, да.

CC>>>В разы дешевле не трогать то, что работает.

S>>Ой, сильно черевато жестоким крахом в будущем, когда таки потрогать придётся.
CC>Зависит.
От того, насколько прокачана удача.
Matrix has you...
Re: Go
От: Alekzander  
Дата: 07.05.24 23:30
Оценка:
Здравствуйте, Sheridan, Вы писали:

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

Жалею, что не прижился майкрософтовский подход, когда котлеты (системы с идеями типа .Net) были отдельно, а мухи (ЯП от VB до Nemerle) — отдельно.
Re[6]: Go
От: m2user  
Дата: 07.05.24 23:40
Оценка:
Pzz>Например, когда в Go из слайса делается сабслайс, они разделяют общую память. Потом, если к исходному слайсу сделать append, он может среаллоцироваться, и тогда память разделится. А может и не среаллоцироваться, если у него места в хвосте было достаточно припасено.

Pzz>Или вот, к примеру, если из слайса по-наивному сделать очередь, добавляя элементы в конце и забирая в начале, все на вид будет вполне работать. Но только выделенная под это дело память будет всегда расти и никогда не освобождаться. Так можно гигабайт, например, сожрать, не заметив. Особенно если делать это неторопясь.


Хм, но это документированное поведение?

Pzz>Или, к примеру, если ты добавляешь записи в map, но забываешь их оттуда удалять. Они ж сами никуда не исчезнут и будут занимать память. Так можно сделать утечку памяти в языке со сборщиком мусора. В Питоне так тоже можно, кстати. И в JS.


А что есть есть языки с автоматическим управлением памятью, где map ведет себя по другому?
Re[5]: Go
От: SkyDance Земля  
Дата: 08.05.24 00:16
Оценка:
CC>Ну давай, покажи класс: большой стек вылетел потому что где то в глубине сибирских руд pread вернул ENOENT.

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

CC>И протерять все внутренние состояния


Ты хочешь сказать, что у тебя все функции по стеку вызывают side effects? Пишут во всякие там глобальные переменные, и прочие stateful штуки? Так что если ты retry-ишь, результат совсем иной получается? Коли это так, то, знаешь, у тебя есть более серьезные проблемы, чем протеря внутренних состояний.

А если функции таки чистые (pure), то все внутренние состояния воспроизводятся прямо из input'а — как-то, имени файла, на который будет сказано ENOENT.

В целом же все логично: если код с самого начала грязный (not pure, ага), то неудивительно, что в него приходится пихать еще больше грязи на тему запоминания внутренних состояний в процессе пролета исключения вверх. Вот только назвать это хорошей программой... ну, я б не рискнул. Разве что если там какие-то сурово-жесткие ограничения на память, CPU или еще что, когда приходится что-то приносить в жертву.
Re: Go
От: klopodav  
Дата: 08.05.24 07:40
Оценка:
S>Моё отношение — прикольная штука, но противоречивая.

Да.
Писать на нем серверную часть с api для веба — довольно просто. Еще и встроенный веб-сервер — это тоже полезно.

Но есть и минусы:
— наркоманский синтаксис (как самого языка, так и многих функций стандартных либ)
— собрать на нем полезное приложение, которое из исходников просто компилируется и просто работает (без всяких там лазаний в интернет в процессе сборки) — не такая простая задача.
Re[7]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.05.24 08:29
Оценка:
Здравствуйте, m2user, Вы писали:

Pzz>>Или вот, к примеру, если из слайса по-наивному сделать очередь, добавляя элементы в конце и забирая в начале, все на вид будет вполне работать. Но только выделенная под это дело память будет всегда расти и никогда не освобождаться. Так можно гигабайт, например, сожрать, не заметив. Особенно если делать это неторопясь.


M>Хм, но это документированное поведение?


Конечно.

Pzz>>Или, к примеру, если ты добавляешь записи в map, но забываешь их оттуда удалять. Они ж сами никуда не исчезнут и будут занимать память. Так можно сделать утечку памяти в языке со сборщиком мусора. В Питоне так тоже можно, кстати. И в JS.


M>А что есть есть языки с автоматическим управлением памятью, где map ведет себя по другому?


Думаю, что нет.
Re[3]: Go
От: akasoft Россия  
Дата: 08.05.24 11:24
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz> от обилия восклицательных знаков

Раст для девочек?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[2]: Go
От: m2user  
Дата: 08.05.24 15:59
Оценка:
Pzz>Я пишу на нём системный софтварий.

Я недавно в теме про Carbon lang интересовался разработкой библиотек на Go с целью использования их из других ЯП.
И вроде как способ есть и с примерами, но судя по комментам есть какие-то препятствия?
https://rsdn.org/forum/flame.comp/8731366.1
Автор: pagid_
Дата: 14.04 17:03
Re[7]: Go
От: SkyDance Земля  
Дата: 08.05.24 16:22
Оценка:
SD>> Пишут во всякие там глобальные переменные
CC>Ты забываешь про диск, сеть, shared memory, etc

То есть те самые side effects. Ты серьезно сейчас о коде на языке Go, который полон такой дряни? Впрочем, и на любых других языках подобный кошмар не поощряется.

CC> Куда именно — знает только функция дайте_мне_чего_то_там у себя внутри.


Но она же знает каждый раз ОДИНАКОВО, то есть БЕЗ side effects? Стало быть, повторяя ТОТ ЖЕ запрос, ты получаешь ТОТ ЖЕ ответ? Если нет, то тут уже тебе не искючения нужны, а полная запись трейса (для чего существуют инструменты типа tracing debugger, но из применение ограничено только таким софтом, где есть реальные причины делать функции с побочными эффектами).

CC>Т.е. ошибка таки ловится на каждой подфункции а не где то вверху со всех скопом?


Только в функциях, которые вызывают побочные эффекты (то есть их поведение не детерминировано). При грамотном проектировании этих функций крайне мало, а то и вовсе нет. Многие мощные языки программирования (особенно функциональные) только так и предлагают работать. Это намного эффективнее, чем заниматься идиотизмом дебаггинга недетерминированного поведения.
Re[8]: Go
От: CreatorCray  
Дата: 08.05.24 23:12
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Но она же знает каждый раз ОДИНАКОВО

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

SD> Если нет, то тут уже тебе не искючения нужны, а полная запись трейса

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

SD>Только в функциях, которые вызывают побочные эффекты

В куда бОльшем колве мест.
Для начала многие сложные функции внутри data driven, для разных данных ведут себя сильно по разному, но данных этих у тебя нет и по privacy причинам быть не может. Следовательно только стек бесполезен, надо контекст, причём такой, которые не разглашает юзерских данных. Просить репро банально некого, потому как тебе долетает только обезличенная телеметрия — ты банально не знаешь у кого из сотен миллионов пользователей сие случилось.
Добро пожаловать в реальный мир.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.05.24 23:36
Оценка:
Здравствуйте, CreatorCray, Вы писали:

SD>>В процессе пролета будет накоплен стек

CC>Этого крайне мало. Надо куда больше контекста.
CC>Более того сие нихрена не работает в компилируемых языках с оптимизаЙцией и инлайнингом.

Go умеет в инлайнинг и рождает при этом, в панике, прекраснейшие стеки.

Тем не менее, это не повод отдавать все ошибки наверх. Там с ними нифига не разберутся, а просто красиво распечатают стек и отправят это еще выше наверх, человеческому пользователю, чтобы он разбирался.
Re[5]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 08.05.24 23:38
Оценка:
Здравствуйте, CreatorCray, Вы писали:

SD>>Мне при виде такого сразу хочется руки оторвать тем, кто не понимает, что такое "обработка ошибок".

CC>Ну давай, покажи класс: большой стек вылетел потому что где то в глубине сибирских руд pread вернул ENOENT.
CC>Где, какой, что делалось, что читалось, зачем?

При каких вообще условиях pread может вернуть ENOENT?
Re[8]: Go
От: SkyDance Земля  
Дата: 09.05.24 04:05
Оценка:
Pzz>Тем не менее, это не повод отдавать все ошибки наверх. Там с ними нифига не разберутся, а просто красиво распечатают стек и отправят это еще выше наверх, человеческому пользователю, чтобы он разбирался.

Правильно. Ошибки нужно обрабатывать там, где их МОЖНО обработать. Обработать — это не "залогировать и кинуть дальше", а сделать некое осмысленное действие. Скажем, если это ошибка типа "объект не был создан", но ошибку можно исправить путем создания дефолтного объекта, — на самом нижнем уровне где это можно сделать, там и обработать.

Но если "обработка ошибок" заключается в показе диалога юзеру, то и исключение должно пролетать до того места, где этот диалог можно показать. Ловить его 10 раз по дороге и перезапускать с потерей оригинального контекста — жжуть и happy debugging.
Re[8]: Go
От: CreatorCray  
Дата: 09.05.24 10:10
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Go умеет в инлайнинг и рождает при этом, в панике, прекраснейшие стеки.

Это ж детский сад а не полноценный инлайнинг тогда
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Go
От: CreatorCray  
Дата: 09.05.24 10:10
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>При каких вообще условиях pread может вернуть ENOENT?

В том случае прилетело через четвёртые руки.
Т.е. на три уровня ниже файловой системы, на которой лежал тот самый файл. Даже не в том же стеке.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Go
От: Буравчик Россия  
Дата: 09.05.24 18:16
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>И в пресловутом го 99.9% ошибок обрабатываются ровно так же — на самом верху. А во всех остальных местах просто return err


В теории да, но на практике (гошной) не стоит так делать.
Люди написали даже линтеры, которые запрещают "просто return err".
Best regards, Буравчик
Re[10]: Go
От: Sharov Россия  
Дата: 09.05.24 18:24
Оценка:
Здравствуйте, SkyDance, Вы писали:

CC>>Она тебе выдаст одинаковый ответ, но получить его внутри может по разному. И свалиться внутри может тоже по разному.

SD>Еще раз: функция либо детерминированная, либо зависит от побочных эффектов. Если там "по-разному", суть детерминированность отсутствует, то или ее нужно зарефакторить (если это кишочки, которые не поросли контрактами API) и сделать детерминированной. Если же контракт гвоздями прибит — вырвать волос с головы проектировщика за такой "дизайн", и, увы, перехватывать пролетающее исключение (оно может быть как в виде ли исключения, так return code, который по сути есть проносимое врукопашную исключение) в целях дальнейшего его проброса с дополнительными данными о том, что именно пошло недетерминированно, и почему.

Какое вычисление(ну ладно, польза) без side effect'ов? Смысл программ тогда теряется. Ох уж эти аппологеты фп.

CC>>Банальные коды ошибок с логгингом сразу по месту возникновения и пробросом наверх прекрасно справляются.

SD>То есть ты вместо хорошего детерминированного дизайна снова полагаешься на побочные эффекты ("логирование"). И если оно сломано, отфильтровано или засемплировано, — good luck debugging. Нет, это хреновый дизайн. В хорошем дизайне функции работают детерминированно, и из результат зависит только от входных данных. Где это невозможно (скажем, нужно что-то прочитать из другой системы), приходится добавлять метаданные в пролетающее исключение (типа, "спросили у другой системы какой-то параметр, она в тот момент вернула ХХХ").

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

CC>>В куда бОльшем колве мест.

SD>Нет, только в недетерминированных функциях. Которые, кстати, давно уже объявлены злом. Только совсем уж дремучие кодеры не в курсе про функциональный подход.


CC>>Добро пожаловать в реальный мир.

SD>Это не реальный мир, а строго огороженные вольеры в зоопарке К счастью, в современном мире есть куда более надежные и качественные подходы к проектированию. Но, понятно, застрявшие во времена "классной сишечки", этак середины 80х, вряд ли смогут осознать.

Это именно реальный мир. В огороженном вольере сидять как раз программисты на фп языках. Ну или
в очень неплохо адаптированных под конкретные вещи языках типа Эрланг. Все остальные вынуждены работать
с разного рода io операциями, где могут быть всякие сюрпризы.
Кодом людям нужно помогать!
Re[9]: Go
От: Sharov Россия  
Дата: 09.05.24 18:25
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Но если "обработка ошибок" заключается в показе диалога юзеру, то и исключение должно пролетать до того места, где этот диалог можно показать. Ловить его 10 раз по дороге и перезапускать с потерей оригинального контекста — жжуть и happy debugging.


Есть механизмы, которые позволяют не терять оригинальный контекст\стек.
Кодом людям нужно помогать!
Re[11]: Go
От: SkyDance Земля  
Дата: 09.05.24 18:50
Оценка:
S>Какое вычисление(ну ладно, польза) без side effect'ов?

Return value, конечно же. И дело в "апологетстве", а в минимизации мест, где происходят side effects — для того, чтобы отладка всего этого не стала кошмаром. Дело в том, что любой side effect по сути своей является ничем иным как использованием "глобальной переменной". Которые ровно за этот самый недетерминизм и ругают.

S>И как добавлять эти метаданные без перехвата исключения на месте?


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

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

S>Это именно реальный мир. В огороженном вольере сидять как раз программисты на фп языках. Ну или


ФП тут не при чем, это вопрос грамотного дизайна. Детерминированное поведение ровно так же ожидается и от функций на все том же С++. Собственно, на этом базируется все авто-тестирование — подаются те самые детерминированные "моки", которые детерминированно возвращают ожидаемое значение.

Если совсем уж простой пример привести, если функции на языке С++ передать все данные, и никакие другие глобальные переменные та функция не использует, ее поведение должно быть детерминировано. Легко тестируемо, и вообще, о такой функции легко рассуждать (reasoning). Даже если кому-то поначалу сложно научиться (ну как же так, всю жисть глобальные переменные дергали, а тут вдруг низ-зя), это таки вопрос освоения мощных инструментов. Речь, разумеется, о тех участках кода, где эти инструменты применимы (это подавляющее большинство non-performance-critical кода).
Re[12]: Go
От: CreatorCray  
Дата: 09.05.24 21:05
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Таких мест должно быть очень мало.

В реальности же их очень много.

SD> Потому что если их много, отладка такой программы будет настоящим адом.

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

SD> Все-таки, эффективное программирование возможно только тогда, когда программа детерминированно делает что от нее ожидается.

В сферовакууме, где ошибок не случается, а оборудование всегда идеально работает, ага.

SD>ФП тут не при чем, это вопрос грамотного дизайна.



SD> Детерминированное поведение ровно так же ожидается и от функций на все том же С++.

Никто не гарантирует что то, что твоя функция вызывает, не вернёт ошибку. Ты не в вакууме, ты сидишь над большой кучей другого кода, под которым ещё и железо, под которым всякие нестабильные physical meduiums с интерференцией и рандомными bit flips.

SD>Собственно, на этом базируется все авто-тестирование — подаются те самые детерминированные "моки", которые детерминированно возвращают ожидаемое значение.

Это вообще ортогонально.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[13]: Go
От: SkyDance Земля  
Дата: 09.05.24 22:10
Оценка:
CC>В реальности же их очень много.

Чем хуже код, тем больше, ага.

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


В кривых системах, само собой.

CC>Никто не гарантирует что то, что твоя функция вызывает, не вернёт ошибку.


Не вернет. А если вернет (через исключение), то там весь нужный контекст. Расширять контекст нужно только там, где, блин, нужно его расширять (потому что поведение недетерминированное).
Re[5]: Go
От: vsb Казахстан  
Дата: 09.05.24 23:15
Оценка:
Здравствуйте, Буравчик, Вы писали:

vsb>>И в пресловутом го 99.9% ошибок обрабатываются ровно так же — на самом верху. А во всех остальных местах просто return err


Б>В теории да, но на практике (гошной) не стоит так делать.

Б>Люди написали даже линтеры, которые запрещают "просто return err".

Ну в последних версиях стало возможно return fmt.Errorf("bla failed: %w", err), пишут так теперь. Теперь не только раскрутка стека появилась, но и кривоватый стектрейс, уже прогресс. Или о чём речь?
Re[5]: Go
От: CreatorCray  
Дата: 10.05.24 02:40
Оценка:
Здравствуйте, ononim, Вы писали:

O>хуже

On a bright side: выглядеть они стали моложе и веселее

O>ну или так

Тут надо видимо знать какой то контекст, не понятно где лопата
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Go
От: m2user  
Дата: 10.05.24 04:48
Оценка:
Pzz>Поэтому пока такая DLL-ка в процессе одна, все ОК. А если их несколько, или если сам процесс Go-шный, начинаются непонятные глюки. Да еще и разные, в зависимости от OS.

Досадно.
Я смотрю, много кто уже вляпался в эту проблему:
go/adbc/driver/snowflake+flightsql: Memory access violation when both are used in Python #1841

А ведь фичу сделали ещё в 2013 г., но с тех пор так и не убрали это ограничение.
https://github.com/golang/go/issues/65050#issuecomment-1885540619

For plugins at load time it takes extra steps to find exisiting Go runtime(s) and attach various metadata (tables) to the existing ones.
For c-shared build mode, it currently doesn't do that. I think there is no fundamental reason that this couldn't be done. But it needs time to make it work.

Re[12]: Go
От: Sharov Россия  
Дата: 10.05.24 11:20
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Return value, конечно же. И дело в "апологетстве", а в минимизации мест, где происходят side effects — для того, чтобы отладка всего этого не стала кошмаром. Дело в том, что любой side effect по сути своей является ничем иным как использованием "глобальной переменной". Которые ровно за этот самый недетерминизм и ругают.


Что такое глобальная переменная в контексте записи на диск? Содержимое жестокого диска + (опционально)RAM?
А в случае передеачи\приема данных из сети -- содержимое дисков и памяти, всех подсоединенных к сети
компьютеров? И как предполагается взаимодействовать, если нету глобальных переменных?
Очевидно, что мы общаемся благодарю изменению некой глобальной переменной (бд на диске). Без
изменения этой глобальной переменной общение и много чего еще, да почти все в ИТ, было бы
не возможно.

S>>И как добавлять эти метаданные без перехвата исключения на месте?

SD>В тех местах, где таки надо снабдить пролетающее исключение — хватай, добавляй метаданные, прокидывай дальше.
SD>Таких мест должно быть очень мало. Потому что если их много, отладка такой программы будет настоящим адом. Все-таки, эффективное программирование возможно только тогда, когда программа детерминированно делает что от нее ожидается. А не валится с рандомной диагностикой.

Это так, но такое не всегда возможно.

S>>Это именно реальный мир. В огороженном вольере сидять как раз программисты на фп языках. Ну или

SD>ФП тут не при чем, это вопрос грамотного дизайна. Детерминированное поведение ровно так же ожидается и от функций на все том же С++. Собственно, на этом базируется все авто-тестирование — подаются те самые детерминированные "моки", которые детерминированно возвращают ожидаемое значение.
SD>Если совсем уж простой пример привести, если функции на языке С++ передать все данные, и никакие другие глобальные переменные та функция не использует, ее поведение должно быть детерминировано. Легко тестируемо, и вообще, о такой функции легко рассуждать (reasoning). Даже если кому-то поначалу сложно научиться (ну как же так, всю жисть глобальные переменные дергали, а тут вдруг низ-зя), это таки вопрос освоения мощных инструментов. Речь, разумеется, о тех участках кода, где эти инструменты применимы (это подавляющее большинство non-performance-critical кода).

О каких инструментах речь? А почему именно инструменты, а не методологии?
Кодом людям нужно помогать!
Re[13]: Go
От: SkyDance Земля  
Дата: 10.05.24 16:26
Оценка:
S>Что такое глобальная переменная в контексте записи на диск? Содержимое жестокого диска + (опционально)RAM?

Речь о детерминизме: если содержимое диска (и RAM) детерминировано (т.е. мы _ЗНАЕМ_, что читаем таблицу умножения с диска, или знаем, что мы читаем ровно тот же файл, что и будет там дальше), смысла добавлять это в метаданные пролетающего исключения нет. Попробую еще раз повторить: перехватывать и модифицировать исключение нужно только в тех случаях, когда поведение функции проблематично из-за отсутствия повторяемости (детерминизма).
В контексте тестирования: зачем мы используем моки? Да ровно затем, чтобы поведение SUT (system under test) было детерминированным. Иначе вместо отладки своей системы мы будем отлаживать баги зависимостей.

Кстати, о метаданных. В контексте все того же pread, возвращающего ENOENT — сдается мне, редко когда в пролетающее исключение будут добавлять, например, половину прочитанных данных (потому что ошибка произошла при чтении второй половины).

S>компьютеров? И как предполагается взаимодействовать, если нету глобальных переменных?


Очевидно же, что целью запуска программ как раз являются какие-то побочные эффекты (например, вывод чего-то на экран). Но код, где эти эффекты создаются, при грамотном проектировании всегда хорошо локализован. К примеру, слой, который пишет данные на диск, обычно отделен от вычислительного слоя. Именно затем и отделен, чтбоы минимизировать те самые побочные эффекты. Чтобы можно было легко и надежно тестировать. Я не знаю, сколько раз уже говорили о том, что раскидывать state changes по всему коду так себе идея. Сколько уже этих разговоров про transactional behaviour (а ведь это не что иное как выделение побочных эффектов в две специальные области, read и write, так что первое осуществляется при старте транзакции, второе — при commit'е).

S>О каких инструментах речь? А почему именно инструменты, а не методологии?


Методологию я тоже считаю инструментом. Кроме методологии, могут быть и непосредственно технические решения (да те же транзакции), и языки (более-менее припоминается Haskell, ибо вышеупомянутый erlang ну очень прагматичен в этих вопросах, и не пытается ограничить создание побочных эффектов).
Re[7]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.05.24 00:25
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Pzz, Вы писали:


Pzz>>При каких вообще условиях pread может вернуть ENOENT?

CC>В том случае прилетело через четвёртые руки.
CC>Т.е. на три уровня ниже файловой системы, на которой лежал тот самый файл. Даже не в том же стеке.

Чёй-то оно неуставные коды ошибок в pread суёт? Кривая реализация сетевой файловой системы?
Re[5]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.05.24 00:29
Оценка:
Здравствуйте, ononim, Вы писали:

Pzz>>> от обилия восклицательных знаков

A>>Раст для девочек?
O>хуже

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

O>ну или так


И заставят коров пасти...
Re[6]: Go
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.05.24 00:30
Оценка:
Здравствуйте, CreatorCray, Вы писали:

O>>хуже

CC>On a bright side: выглядеть они стали моложе и веселее

Ты не знаешь, сколько их туда зашло, чтобы две вышли.
Re[8]: Go
От: CreatorCray  
Дата: 11.05.24 06:12
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Чёй-то оно неуставные коды ошибок в pread суёт?

А какую оно должно было сувать если произошло нестандартное?
Втихаря сжевать реальную ошибку, которую вернули "снизу" и выплюнуть generic "Eнишмагла" — за такое сразу руки отрывать надо.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[7]: Go
От: CreatorCray  
Дата: 11.05.24 06:12
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ты не знаешь, сколько их туда зашло, чтобы две вышли.

Хм... Я смотрю там девайс внутри куда суровее чем казалось поначалу.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: Ну да, ну да...
От: rudzuk  
Дата: 11.05.24 08:27
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz> мало того, что не обещают какой-либо определенный порядок обхода при итерации ассоциативного массива (который в Go называется map), а еще и делают, в ущерб даже и производительности, этот порядок псевдослучайным, разным при каждом вызове.


Понимаю смысл рандомизации при заполнении ассоциативного массива, но при итерации... Зачем?
avalon/3.0.2
Re[7]: Ну да, ну да...
От: m2user  
Дата: 11.05.24 08:57
Оценка:
R>Понимаю смысл рандомизации при заполнении ассоциативного массива, но при итерации... Зачем?

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