Здравствуйте, kaa.python, Вы писали:
KP>>>Ты взрослый дядя, нормальный аргумент. В старых проектах бывает всяко. В новых не бывает, если разработчики следуют хорошим практикам, и для плюсов это C++ Core Guidelines. Вот тут
я как раз про это и говорил. O>>На самом деле в современных плюсах не хватает режима который бы их энфорсил, запрещая голые указатели и т.п.
KP>Совсем прям их не запретить, как мне кажется, но сильно сократить острые места можно через интеграцию clang-tidy с CI.
В каких-то абстрактных алгоритмах я и в 0x03 голыми не пользовался. Если под большую платформу что-то пишу, даже и не вспоминаю про них. Код под STMку — да, там и массивы, и указатели голые иногда бывают
Здравствуйте, CreatorCray, Вы писали:
L>>Архитектура "на shared" указателях — это отсутсвие архитектуры. CC>Ну т.е. выходит куча managed языков да и вообще всё, где есть GC — с отсутствующей архитектурой.
Ну, обычно ващет именно так дело и обстоит
CC>В том числе шарп и жаба, потому как хоть там и нет явных shared указателей объект жив пока на него хоть кто то ссылается.
Здравствуйте, Zhendos, Вы писали:
Z>А вот "Cell" очень редко приходилось использовать, и только в начале использования Rust, Z>потом пересмотрел архитектуру и как-то незаметно вообще прекратил его использовать.
Тормозиллу на расте уже переписали? Или опять не осилили?
KP>UPD. а вот такой подход приносит проблемы в любом языке: KP>
тип тут "callback" менят то-то, тут вызывается эта функция и в итоге меняется то-то
KP>И от проблемного дизайна Rust не спасает, а вот функциональщина тебя бы тут как раз спасла.
И в C++ есть все средства для этого.
ЗЫ Мне в кути вот эта вот слот-сигнальщина и не нравится — если на неё плотно завязаться, то там сам чёрт собаку сломит. Поэтому — только C++, слот-сигналы только на границах взаимодействия
Здравствуйте, kaa.python, Вы писали:
L>>Нормальная архитектура подразумевает четкую модель владения данными KP>Если уж настолько придираться к словам, то архитектура приложения и умные указатели вообще никак не связаны друг с другом.
Здравствуйте, CreatorCray, Вы писали:
CC>Ну т.е. выходит куча managed языков да и вообще всё, где есть GC — с отсутствующей архитектурой.
При чем тут архитектура языков?
CC>В том числе шарп и жаба, потому как хоть там и нет явных shared указателей объект жив пока на него хоть кто то ссылается.
T4r4sB спрашивал "С++ приходится держать в голове кучу правил "не обращаться по этому указателю после того, как уничтожен тот буфер" и "Ок, архитектура на шаредак и слабых указателях, получается?". У человека PTSD от отсутсвия GC.
Я подобное видел лет 15 назад на одном проекте. Получив в паре мест по сегфолту, все, вообще все завернули в shared_ptr, лишь бы не надорваться над продумыванием стратегии владения данными. Понятное дело, что вместо регулярной рассеянной стрельбы по ступням получили редкий, но прицельный выстрел в бедро
Попытка строить архитектуру системы методом "объявим сущность А серебряной пулей и понеслась", приводит примерно к одинаковому гну на выходе вне зависимости от языка.
Здравствуйте, Marty, Вы писали:
M>И в C++ есть все средства для этого.
А что в C++ есть для решения проблемы с изменением одного состояния из разных мест? Что-то типа CAF? Оно как бы да, частично решает такую проблему, но ты всё равно имеешь все возможности изменить данные из разных мест. Полноценное решение будет только в функциональном языке типа Erlang как не крути.
Здравствуйте, kaa.python, Вы писали:
M>>И в C++ есть все средства для этого.
KP>А что в C++ есть для решения проблемы с изменением одного состояния из разных мест? Что-то типа CAF? Оно как бы да, частично решает такую проблему, но ты всё равно имеешь все возможности изменить данные из разных мест. Полноценное решение будет только в функциональном языке типа Erlang как не крути.
Прошу простить мою дремучесть, но я не в курсе, о какой проблеме ты говоришь. Но вообще в C++ есть средства для решения любых проблем
Здравствуйте, Marty, Вы писали:
M>Прошу простить мою дремучесть, но я не в курсе, о какой проблеме ты говоришь. Но вообще в C++ есть средства для решения любых проблем
Не любых, параллельная обработка данных в C++ это то еще хождение по граблям. Предположим у тебя есть структура данных и указатель на неё. Ты всегда можешь передать этот указатель куда-то еще (другой поток, асинхронно возникающее событие и т.п.) и одновременно изменить данные из разных мест. При достаточно хорошем покрытии кода тестами ThreadSanitizer скорее всего отловит такую ошибку, но у тебя нет возможности её избежать в общем случае.
Здравствуйте, kaa.python, Вы писали:
M>>Прошу простить мою дремучесть, но я не в курсе, о какой проблеме ты говоришь. Но вообще в C++ есть средства для решения любых проблем
KP>Не любых, параллельная обработка данных в C++ это то еще хождение по граблям. Предположим у тебя есть структура данных и указатель на неё. Ты всегда можешь передать этот указатель куда-то еще (другой поток, асинхронно возникающее событие и т.п.) и одновременно изменить данные из разных мест. При достаточно хорошем покрытии кода тестами ThreadSanitizer скорее всего отловит такую ошибку, но у тебя нет возможности её избежать в общем случае.
Средства для решения любых проблем — таки есть. Просто не все видят проблемы, и не все пользуются средствами.
Кто мешает написать прокси-объект, который разруливает атомарность доступа?
Голенькие указатели — да, не совсем безопасны, особенно в руках всяких индусов. Так индусы всё что угодно поломают, не вижу, чем C++ тут так уникален
Здравствуйте, Marty, Вы писали:
M>Средства для решения любых проблем — таки есть. Просто не все видят проблемы, и не все пользуются средствами. M>Кто мешает написать прокси-объект, который разруливает атомарность доступа?
Это не средство решение проблемы, это способ поставить табличку "не входи — убьет" и надеется что её прочитают.
M>Голенькие указатели — да, не совсем безопасны, особенно в руках всяких индусов. Так индусы всё что угодно поломают, не вижу, чем C++ тут так уникален
Индусы тебе чем не угодили-то? У меня сейчас в коллегах не мало индийцев с PhD и без, людей равных которым по уровню в российских компаниях я просто не видел. А вот говнокода и говнокодеров в российских компаниях, причем крупных и на слуху я повидал мягко говоря не мало.
Здравствуйте, kaa.python, Вы писали:
M>>Средства для решения любых проблем — таки есть. Просто не все видят проблемы, и не все пользуются средствами. M>>Кто мешает написать прокси-объект, который разруливает атомарность доступа?
KP>Это не средство решение проблемы, это способ поставить табличку "не входи — убьет" и надеется что её прочитают.
Ну, я не знаю, как ты это готовишь. Если у тебя только такие варианты — ну ССЗБ, что могу сказать
M>>Голенькие указатели — да, не совсем безопасны, особенно в руках всяких индусов. Так индусы всё что угодно поломают, не вижу, чем C++ тут так уникален
KP>Индусы тебе чем не угодили-то? У меня сейчас в коллегах не мало индийцев с PhD и без, людей равных которым по уровню в российских компаниях я просто не видел. А вот говнокода и говнокодеров в российских компаниях, причем крупных и на слуху я повидал мягко говоря не мало.
Ну, хорошо, замени индусов на таджиков или узбеков, и облегчись
Здравствуйте, Marty, Вы писали:
M>Ну, я не знаю, как ты это готовишь. Если у тебя только такие варианты — ну ССЗБ, что могу сказать
Может быть потому, что проекты обычно не в одно рыло и не на один раз пишут. А большой командой, потом еще поддерживают?
M>Ну, хорошо, замени индусов на таджиков или узбеков, и облегчись
А может я хочу на русских говнокодеров заменить. Так можно, рассистик ты наш?
Здравствуйте, kaa.python, Вы писали:
M>>Ну, я не знаю, как ты это готовишь. Если у тебя только такие варианты — ну ССЗБ, что могу сказать
KP>Может быть потому, что проекты обычно не в одно рыло и не на один раз пишут. А большой командой, потом еще поддерживают?
Ну, так обложить проксями ещё больше и чаще, в чем проблема? Язык позволяет. И при этом нормальный компилятор выдаст минимальный оверхед
M>>Ну, хорошо, замени индусов на таджиков или узбеков, и облегчись
KP>А может я хочу на русских говнокодеров заменить. Так можно, рассистик ты наш?
Да меняй на кого угодно. Если я тупых говняков марсианами буду называть, ты успокоишься, или BLM стучит в твоём сердце?
Здравствуйте, Marty, Вы писали:
M>Ну, так обложить проксями ещё больше и чаще, в чем проблема? Язык позволяет. И при этом нормальный компилятор выдаст минимальный оверхед
т.е. ты считаешь чем больше поставить табличек "не входи — убьет", тем менее убьет в итоге?
M>Да меняй на кого угодно. Если я тупых говняков марсианами буду называть, ты успокоишься, или BLM стучит в твоём сердце?
А почему ты считаешь что оскорбление по национальному признаку имеет что-то общее с BLM?
Здравствуйте, kaa.python, Вы писали:
M>>Ну, так обложить проксями ещё больше и чаще, в чем проблема? Язык позволяет. И при этом нормальный компилятор выдаст минимальный оверхед
KP>т.е. ты считаешь чем больше поставить табличек "не входи — убьет", тем менее убьет в итоге?
В нормальном C++ гавно просто не соберётся
M>>Да меняй на кого угодно. Если я тупых говняков марсианами буду называть, ты успокоишься, или BLM стучит в твоём сердце?
KP>А почему ты считаешь что оскорбление по национальному признаку имеет что-то общее с BLM?
Извини, если индусы тебе так дороги. Если я возьму "индусов" в кавычки — это что-то изменит? Против марсиан у тебя нет претензий? У нас в РФ и негра негром назвать не криминал — просто потому, что это заметный отличительный признак. У нас негров мало. Даже меньше, чем конных бурят в ушанках, и тем более — узкоглазых.
Здравствуйте, kaa.python, Вы писали:
KP>А зачем их вообще помнить? Не храни итераторы за пределами текущей области видимости. Не удаляй объекты из коллекции в цикле.
И не добавляй объекты в коллекцию в цикле. И зависит от коллекции, надо знать в каких можно, а в каких нет.
KP>Если следовать этим двум простым принципам ты никогда не получишь проблемы с итераторами.
Принципы простые, но соблюсти их в большом проекте непросто. Добавил вызов функции в цикл, надо лезть в её недра, скакать по графу вызовов, смотреть нет ли там какого-нибудь вызова, где есть модификация коллекции. Поменял двусвязный список на вектор, проверяй все места, где есть итераторы и пр.
Здравствуйте, kaa.python, Вы писали:
НС>>Какой знакомый аргумент KP>Ты взрослый дядя, нормальный аргумент. В старых проектах бывает всяко.
Бывает. Только проекты на С++ почти все — старые.
KP> В новых не бывает, если разработчики следуют хорошим практикам, и для плюсов это C++ Core Guidelines.
Вот я и говорю, что знакомый аргумент. На форуме чуть ли не каждый первый рассказывает про прекрасный С++, но в дикой природе почему то попадается исключительно треш и содомия. Из свежих наблюдений — Архикад, который течет как не знаю что.