Size: a a a

2021 February 25

AE

Alexander E. in pro.cxx
Александр Караев
Спагетти код порождают попытки имитировать корутины, а сами корутины как раз от него избавляют
это потому, что вам всё равно, сколько потоков и какое взаимодействие между ними может нагенерить компилятор. когда они стартуют, когда их тушить. вот как реализация сделает, так и будет
источник

A

Alex in pro.cxx
если при чтении кода глазами нельзя понять, как он будет выполняться - это спагетти-код
источник

A

Alex in pro.cxx
самый яркий пример спагетти - throw, по сравнению с ним корутины уже такая мелочь, что можно не волноваться, конечно
источник

АК

Александр Караев... in pro.cxx
Alex
если при чтении кода глазами нельзя понять, как он будет выполняться - это спагетти-код
Странное определение спагетти-кода, но ладно, пусть будет так. К слову, корутины и в один поток прекрасно работают (и это не редкий юзкейс, а один из популярных)
источник

A

Alex in pro.cxx
вы знаете более правильно формальное определение спагетти-кода?
источник

АК

Александр Караев... in pro.cxx
Alex
Я, в целом понимаю аргумент, но когда поток выполнения непонятно как входит и выходит в/из функцию, это, извините, спагетти-код
Входит и выходит как раз понятно, как и когда. Видишь co_* - это потенциальная точка "паузы". Всё очень явно.

В каком-нибудь луа, например, всё неявно - можно вызвать функцию, которая внутри себя сделает yield, и запаузит текущую корутину. И при вызове этого не понять, так как никаких дополнительных ключевых слов не требуется. Просто f().
источник

MH

Max Harpsiford in pro.cxx
Alex
если при чтении кода глазами нельзя понять, как он будет выполняться - это спагетти-код
Я думал, что спагетти-код - это код с кучей очевидного дублирования
источник

MH

Max Harpsiford in pro.cxx
Нигде не видел такого прям формального определения, свою точку зрения не навязываю
источник

A

Alex in pro.cxx
Max Harpsiford
Я думал, что спагетти-код - это код с кучей очевидного дублирования
Это меньше всего похоже на правду, как я интуитивно понимаю. ИМХО, под спагетти имеется в виду код,  который сложно читать и поддерживать.
источник

MH

Max Harpsiford in pro.cxx
Да и какая разница, как ты это назовешь, мы же не про конкретный запах кода говорим
источник

A

Alex in pro.cxx
а ничто так не затрудняет чтение, как непонимание, как вообще поток выполнения по этому коду ходит
источник

MH

Max Harpsiford in pro.cxx
Alex
Это меньше всего похоже на правду, как я интуитивно понимаю. ИМХО, под спагетти имеется в виду код,  который сложно читать и поддерживать.
Просто сложно читать и поддерживать - это симптом для кучи разных недочетов
источник

MH

Max Harpsiford in pro.cxx
Если спагетти-код - общее название для плохого кода - ок, могу с этим жить
источник

A

Alex in pro.cxx
не важно, будем считать, что это придуманное мной название для кода с запутанным с точки зрения читателя потоком выполнения
источник

MH

Max Harpsiford in pro.cxx
Alex
не важно, будем считать, что это придуманное мной название для кода с запутанным с точки зрения читателя потоком выполнения
Без проблем :)
источник

MH

Max Harpsiford in pro.cxx
Alex
как по мне, корутины вообще странное исчадие, которое порождает спагетти-код, но раз модно - что ж ты будешь делать
А можете привести пару примеров, как по вашему мнению корутины портят код и примеры, где оно чище?
источник

MH

Max Harpsiford in pro.cxx
Так, чисто на пальцах
источник

DK

Dmitry Khominich in pro.cxx
Stolas Serpentem Vectem 🏴‍☠️
корутины уже появились в компиляторах? а то мой силанг посылает нахрен и пайплайны тоже
В clang 11 поддержка корутин хорошая. Есть баги с address sanitizer и в сложных языковых конструкциях (catch2 REQUIRE(..)) замечал баги кодогенерации. Легко обходится
источник

MH

Max Harpsiford in pro.cxx
Имхо, все такие дискуссии сводятся к «если неправильно применять, так с чем угодно буде спагетти, а вот вы применяйте правильно, и проблем не будет»
источник

AE

Alexander E. in pro.cxx
Max Harpsiford
А можете привести пару примеров, как по вашему мнению корутины портят код и примеры, где оно чище?
аргументы, что код чище с корутинами +- странны. ближе к коду? было типа +- vector.push_back(std::thread f(std::bind(fn, param)) + проход по вектору, чтобы собрать данные. Стало внутри fn co_yield. Сверху код стал красивым и менее запутанным. А внутри стало зависеть от того, как runtime скажет..
источник