@ProCxx

Страница 755 из 2477
Michael
04.04.2017
09:42:38
и вывести эксепшн

если доживу

Tema
04.04.2017
09:42:49
АААА ПАНИКА в таком духе
наверное я понел, просто непривычно слышать это как краш

Michael
04.04.2017
09:44:14
а как же просто корректно завершиться с кодом возврата?
я просто кажу что думаю - это красиво, но нереалистично

Google
Michael
04.04.2017
09:44:26
во-первых, крашатся все сейфовый код занимает ОЧЕНЬ много эффорта

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

это тоже информативная ошибка

единственное что не должно крашиться - это какой-то риалтайм расчитанный на длительную работу в цикле

он может спастись

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

desu
04.04.2017
09:46:45
У меня тут есть многопоточная прога. Она когда закрывается каждый раз в разном месте крашится

Michael
04.04.2017
09:47:00
мхех тру стори

но это очень просто решается

/dev
04.04.2017
09:47:16
это должно крашнуться
Если бы, если бы

Tema
04.04.2017
09:47:26
У меня тут есть многопоточная прога. Она когда закрывается каждый раз в разном месте крашится
я зделал субсистем менеджер, который при закрытии всем тредам рассылает сигнал остановки

desu
04.04.2017
09:47:31
Я искал искал так ин не понял в чем дело

Google
Michael
04.04.2017
09:47:44
и да, ставишь флаг остановки и ждешь

Дед Пегас
04.04.2017
09:47:51
ПОтоки джинить нужно.

/dev
04.04.2017
09:47:53
Потом не крашнется, память испортит, и будешь как дурак баги искать

Дед Пегас
04.04.2017
09:47:57
Может, стоило заюзать трэд пул?

Michael
04.04.2017
09:48:22
Потом не крашнется, память испортит, и будешь как дурак баги искать
это теоретически, конкретно есть места где не может быть багов, можно только упасть

приведенная Анатолием претензия ровно из этого разряда

там нечему выживать, если оно упадет - оно упадет с сегфолтом

конкретно этот фрагмент

/dev
04.04.2017
09:49:09
это теоретически, конкретно есть места где не может быть багов, можно только упасть
В теории есть теоретическое поведение, на практике никаких гарантий нет

Tema
04.04.2017
09:49:20
там нечему выживать, если оно упадет - оно упадет с сегфолтом
блин чот дико как то, я привык что всегда можно выжыть

ваще всегда

Michael
04.04.2017
09:49:26
можно!

но не стоит времени!

в этом мой аргумент

Tema
04.04.2017
09:49:36
да наверное

Michael
04.04.2017
09:49:38
в коммерческой разработке

если вылизываешь свой юбимый код - совсем другое дело

я-то свой любимый код вылижу и даже ловушки расставлю, но без фанатизма

babysitter
04.04.2017
09:50:22
оставлять возможность падения в сегфолт в коммерческой разработке? или я из контекста вырвал

Google
desu
04.04.2017
09:50:22
Там поток передачи по модбас поток отображения картинки поток передающий в разделяемую память..

Michael
04.04.2017
09:50:26
иногда то что должно упасть просто должно упатсть

/dev
04.04.2017
09:50:29
в коммерческой разработке
Это в эджайлах с недельными релизами так, где принято сырое продавать

Michael
04.04.2017
09:50:37
единственное что не должно крашиться - это какой-то риалтайм расчитанный на длительную работу в цикле

он может спастись

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

desu
04.04.2017
09:50:55
И куча какихто таймеров

Michael
04.04.2017
09:50:57
сегфолт в ваншотной программе не имеет значения

Anatoly
04.04.2017
09:51:00
просто есть такая вещь как культура программирования: типа не могу я просто так оставить голый указатель, если есть потенциальный выброс исключения

Michael
04.04.2017
09:51:02
ей незачем спасаться

максимум, чтобы вывести ошибку

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

это значительноо продуктивнее

я не плюсовик, но мне кажется, это из разряда здравого смысла

desu
04.04.2017
09:52:35
И ошибка в духе вот ассемблерный код пару строк вот тут мы тютю

Michael
04.04.2017
09:52:52
ошибка в духе вот такая строка ассерт фейлд

и все понятно сразу

desu
04.04.2017
09:53:16
Корруптед

Google
/dev
04.04.2017
09:54:06
а ваншотным программам зачем это? они ж ничегго не попортят, слава виртуальной памяти
Не-а. Чуть систему усложнишь, и вылезет в другую память без сигфолта

Michael
04.04.2017
09:54:21
мне просто сложно рассуждать об этом в пределах моего хобби потому что меня оно устраивает "как есть", мне нужен результат, и это не массовый продукт

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

Anatoly
04.04.2017
09:55:38
в конечном итоге следование определенной культуре (правилам) ускоряет поиск проблем в не только реальном, но в одноразовом проекте

/dev
04.04.2017
09:55:45
Но рано или поздно вылезет
И будет корраптед бихейвиор вместо падения

Artem
04.04.2017
09:56:00
ты пишешь, условно, скрипт на плюсах, и ожидаешь от плюсов того же, чего привык ожидать от скриптовых языков - понятных прогнозируемых падений в исключительных ситуациях

Anatoly
04.04.2017
09:56:03
но это все лирика, каждый учится на своих ошибках :D

Artem
04.04.2017
09:56:09
Но плюсы так не работают.



Michael
04.04.2017
09:56:27
и никак иначе...

/dev
04.04.2017
09:56:40
но это все лирика, каждый учится на своих ошибках :D
На своих-то, но такие ошибки могут стоить недели дебага

Michael
04.04.2017
09:56:52
мне сложно рассуджать о культуре плюсов конкретно, пока я не провел с ними хотя бы пару месяцев

Anatoly
04.04.2017
09:57:45
На своих-то, но такие ошибки могут стоить недели дебага
ну я примерно тоже самое сказал, но хозяин - барин

Michael
04.04.2017
09:58:05
умение предугадыавть ошибки и подстелить сена - это исключительно опыт

так же как и обратная сторона, понимание где подстилать не нужно

я конечно пока что полностью этого лишен

@anatolijs дай, пожалуйста, пример кода, как бы ты защитил такой кусок

size_t outSize; uint8_t *buffer; mrb_dump_irep(mrb, irep, 0, &buffer, &outSize); char *p = (char *)buffer; char_vector_t out(p, p + outSize); mrb_free(mrb, buffer); mrb_close(mrb); return out;

Google
Michael
04.04.2017
10:00:30
вот это было реально полезным финальным аккордом в обсуждении

/dev
04.04.2017
10:00:59
умение предугадыавть ошибки и подстелить сена - это исключительно опыт
Тогда выучи и повторяй перед сном Valgrid наш, на светится memchecker твой, да прибудет vm твоя

Anatoly
04.04.2017
10:01:00
а mrb как определен?

Michael
04.04.2017
10:01:21
mrb_state*

Aleksei
04.04.2017
10:02:00
size_t outSize; uint8_t *buffer; mrb_dump_irep(mrb, irep, 0, &buffer, &outSize); char *p = (char *)buffer; char_vector_t out(p, p + outSize); mrb_free(mrb, buffer); mrb_close(mrb); return out;
Я так понимаю, mrb_dump_irep возвращает код ошибки, а не исключение выбрасывает

Michael
04.04.2017
10:02:09
да, это так

Michael
04.04.2017
10:02:20
но Анатолий же сейчас говорит о НЕПРЕДВИДЕННОМ

Artem
04.04.2017
10:02:45
ну так главное тут обработать код ошибки mrb_dump_irep

Aleksei
04.04.2017
10:03:58
Если ему не удалось выделить память, то дальше при создании вектора ( не знаю, что за тип) может быть исключение

Artem
04.04.2017
10:04:12
еще если mrb открывается вне функции, то и закрывать его надо вне функции, не надо такого рода менеджмент вносить внутрь обработчика

Michael
04.04.2017
10:04:42
он открывается в функции

черт, мне нужен экстеншн вс для гиста, щас поставлю

поставил

https://gist.github.com/micktu/946460a2a30ce74df57d1d85767356ca

вот вся функция

Anatoly
04.04.2017
10:08:40
ну, хотя бы на коленках defer: size_t outSize = 0; uint8_t *buffer = nullptr; mrb_state* mrb = nullptr; mrb_dump_irep(mrb, irep, 0, &buffer, &outSize); std::unique_ptr < mrb_state, std::function<void(mrb_state*)» holder(mrb, [](mrb_state*mrb) { mrb_close(mrb); }); std::unique_ptr < uint8_t, std::function<void(uint8_t*)» holder(buffer, [&mbr](uint8_t *buffer) { mrb_free(mrb, buffer); }); char *p = (char *)buffer; char_vector_t out(p, p + outSize);

Michael
04.04.2017
10:09:09
сколько боли

вы привыкли к этой бесчеловечности?

Anatoly
04.04.2017
10:09:32
ну, во всяком случае все твои динамические ресурсы защищены

по хорошему надо было просто обертку на mbr_state написать и все

Страница 755 из 2477