[ZX]
-
- Исключения тормозят + прошивки как правило то место где все
исключительные ситуации должны быть обработаны сознательно. По
крайней мере у меня это так. Поэтому для меня bool,
Result<>, getLastError, (*onError) - каждая в своих
ситуациях лучше исключения. Kabdim(57 знак., 03.11.2020 12:08)
- У Александреску где-то видео было, рекомендую: fk0(336 знак., 05.11.2020 17:38, ссылка, youtube)
- Собственно за std::optional или его аналоги полностью согласен.
Почему бы не впихнуть "совсем уж плохо" в тот же возвращаемый
результат, если уж весь код пишется в таком стиле? Кмк все одно
уйдет в остановку железа и ресет контроллера, зачем усложнять? - Kabdim(06.11.2020 15:04)
- Исключения - это такой способ остановить выполнение
последовательности операций и подняться до уровня, где их начали
обрабатывать. К примеру запрос к СУБД - у вас там десяток
SELECT'ов, пять INSERT'ов и 4 REPLACE. Все в перемешку, разумеется.
Внезапно, у вас на 5ом запросе из 10 срабатывает нарушение
constraint. Вы кидаете исключение и остальное не обрабатываете.
catch блок откатывает БД к состоянию до запроса и замечательно
ругаемся на клиента за кривые данные. lloyd(245 знак., 06.11.2020 15:27)
- std::optional для этого более чем достаточно. - evgeniy1294(06.11.2020 16:06)
- О да. lloyd(159 знак., 06.11.2020 17:10)
- БД с их транзакциями к эксепшенам прямого отношения не имеют,
логика отдаленно похожая, реализация может быть очень отличающаяся.
Вот заметил все когда исключения хвалят примеры почему-то приводят
откуда угодно кроме эмбедеда. Можно адекватный пример пользы
эксепшенов в прошивке контроллера? - Kabdim(06.11.2020 15:37)
- Эксешпн в прошивке контроллера - это прерывание от Memory
Protection Unit, или некоррентый аргумент RTOS или отказ
накопителя. Для половины случаев можно перезапустить процесс, в
остальных - прыгнуть в failsafe режим. - lloyd(06.11.2020 17:09)
- "Эксешпн в прошивке контроллера - это " прерывание, которое в
терминах референс мануала назвали эксепшеном для того что отличить
от прерываний переферии. Отношений с эксепшенами в C++ о которых
речь в ветке тут нет. Остальные примеры - такие же. Ближе всего
конечно отказ накопителя, но скорее всего он у вас вряд ли
самописный и те бибилотеки которые мне известны экспешенов не
вызвают. Можно конечно изогнуться и в предложеных вариантах сделать
адаптер, который будет вызвать Kabdim(53 знак., 09.11.2020 12:27)
- "Почему С++ автоматом не подхватывает коды возврата С-шной либы в
исключение" - вы поняли, что за вопрос вообще задали? Разумеется,
эксепшены кидает С++ код, и только в том случае, когда он написан
таким образом. Суть в том, что сами исключения кидать в
эмбеддерском коде нужно не так часто. Вот если у вас гуй - вы
можете кидать исключения в setter-е свойства, выводя сообщение
ошибки сразу рядом с полем ввода. Можно делать обработку
nullptr-ов, но это скорее из области lloyd(9 знак., 09.11.2020 14:29)
- Этого вопроса я не задавал. Я пытаюсь понять где же вы их используете. Ваши примеры к эксепшенам в C++ отношения не имеют. Следующее предположение что вы лично у себя в прошивках пишите перевод этих ситуаций в эксепшены плюсов о чем и задан вам уточняющий вопрос. Потому что если вы этого не делаете вообще не ясно зачем вы привели эти примеры. Kabdim(247 знак., 09.11.2020 15:01)
- "Почему С++ автоматом не подхватывает коды возврата С-шной либы в
исключение" - вы поняли, что за вопрос вообще задали? Разумеется,
эксепшены кидает С++ код, и только в том случае, когда он написан
таким образом. Суть в том, что сами исключения кидать в
эмбеддерском коде нужно не так часто. Вот если у вас гуй - вы
можете кидать исключения в setter-е свойства, выводя сообщение
ошибки сразу рядом с полем ввода. Можно делать обработку
nullptr-ов, но это скорее из области lloyd(9 знак., 09.11.2020 14:29)
- "Эксешпн в прошивке контроллера - это " прерывание, которое в
терминах референс мануала назвали эксепшеном для того что отличить
от прерываний переферии. Отношений с эксепшенами в C++ о которых
речь в ветке тут нет. Остальные примеры - такие же. Ближе всего
конечно отказ накопителя, но скорее всего он у вас вряд ли
самописный и те бибилотеки которые мне известны экспешенов не
вызвают. Можно конечно изогнуться и в предложеных вариантах сделать
адаптер, который будет вызвать Kabdim(53 знак., 09.11.2020 12:27)
- Эксешпн в прошивке контроллера - это прерывание от Memory
Protection Unit, или некоррентый аргумент RTOS или отказ
накопителя. Для половины случаев можно перезапустить процесс, в
остальных - прыгнуть в failsafe режим. - lloyd(06.11.2020 17:09)
- std::optional для этого более чем достаточно. - evgeniy1294(06.11.2020 16:06)
- Исключения - это такой способ остановить выполнение
последовательности операций и подняться до уровня, где их начали
обрабатывать. К примеру запрос к СУБД - у вас там десяток
SELECT'ов, пять INSERT'ов и 4 REPLACE. Все в перемешку, разумеется.
Внезапно, у вас на 5ом запросе из 10 срабатывает нарушение
constraint. Вы кидаете исключение и остальное не обрабатываете.
catch блок откатывает БД к состоянию до запроса и замечательно
ругаемся на клиента за кривые данные. lloyd(245 знак., 06.11.2020 15:27)
- Собственно за std::optional или его аналоги полностью согласен.
Почему бы не впихнуть "совсем уж плохо" в тот же возвращаемый
результат, если уж весь код пишется в таком стиле? Кмк все одно
уйдет в остановку железа и ресет контроллера, зачем усложнять? - Kabdim(06.11.2020 15:04)
- Исключения тормозят только в том случае если пытаться (по
непониманию) их использовать как некий стандартный механизм-замену
возвращаемых значений. При выбросе исключения происходит stack
unwinding, возврат указателя стека и это делается в цикле, стек
вызовов интерпретируется как список (list, примерно). Поэтому это
будет разумеется не так быстро как возврат значения, но сейчас тоже
не так фатально. Жуть о очень медленных исключениях идет с эпохи
примерно 96..98 годов, RxTx(674 знак., 03.11.2020 23:34)
- Бесспорно, но у нас вроде разговор про исключения в прошивке
микроконтроллера. - Kabdim(05.11.2020 17:16)
- И что? Что они там тормозят-то? Вот память занимают, но не так чтоб
уж очень много. Критично, когда кроилово начинается. - fk0(05.11.2020 17:33)
- Хорошо когда ресурсов навалом, можно не думать о мелочах. - Kabdim(06.11.2020 13:13)
- Хуже, когда ресурсов навалом, а чудаки продолжают думать о мелочах. - SciFi(06.11.2020 13:34)
- Можно и подругому сказать. Если я знаю как решить задачу
несколькими способами, то выбрать наименее ресурсозатратный способ
вполне логично. Обратное равносильно вредительству. - VladislavS.(07.11.2020 08:03)
- Смотря что считать ресурсом. Процову флэшь или своё время. - mse homjak(07.11.2020 12:16)
- Если я владею более оптимальным методом, то о какой трате времени
речь? Вот простой пример. Эти два выражения делают одно и то же, а
код во втором случае получается более оптимальным. VladislavS.(816 знак., 07.11.2020 16:16)
- Я об другое. Одному и тому-же вам, может оказаться, что одно и
то-же действие надо делать по разному, ибо ценный ресурс у вас, в
зависимости от ситуации, будет разным. Упихнуть программу в дохлый
обрезок, который за счёт цены и серии даст 100500 денег. Упихнуть
программу в микросекунды времени, в дохлый обрезок... Упихнуть
программу "шоб завтра было и бери самый жирный камень в этой
Вселенной". - mse homjak(07.11.2020 18:24)
- Согласен, я попозже понял что видимо большинство участников конфы работают в менее ограниченных условиях. - Kabdim(09.11.2020 15:02)
- У нас, обычно, есть три дня - вчера, сегодня и завтра к утру. Что на огрызке, что на жиробасине. И никто не мешает наработки с огрызка на жирном применять. Наоборот сложнее. - VladislavS.(08.11.2020 12:56)
- Я об другое. Одному и тому-же вам, может оказаться, что одно и
то-же действие надо делать по разному, ибо ценный ресурс у вас, в
зависимости от ситуации, будет разным. Упихнуть программу в дохлый
обрезок, который за счёт цены и серии даст 100500 денег. Упихнуть
программу в микросекунды времени, в дохлый обрезок... Упихнуть
программу "шоб завтра было и бери самый жирный камень в этой
Вселенной". - mse homjak(07.11.2020 18:24)
- Если я владею более оптимальным методом, то о какой трате времени
речь? Вот простой пример. Эти два выражения делают одно и то же, а
код во втором случае получается более оптимальным. VladislavS.(816 знак., 07.11.2020 16:16)
- Смотря что считать ресурсом. Процову флэшь или своё время. - mse homjak(07.11.2020 12:16)
- Возможно вы отчасти правы. У нас скорее всео разные условия и из этого следуют разные отношения к инструментарию. А универсального ответа нет. - Kabdim(06.11.2020 15:18)
- Можно и подругому сказать. Если я знаю как решить задачу
несколькими способами, то выбрать наименее ресурсозатратный способ
вполне логично. Обратное равносильно вредительству. - VladislavS.(07.11.2020 08:03)
- Хуже, когда ресурсов навалом, а чудаки продолжают думать о мелочах. - SciFi(06.11.2020 13:34)
- Хорошо когда ресурсов навалом, можно не думать о мелочах. - Kabdim(06.11.2020 13:13)
- И что? Что они там тормозят-то? Вот память занимают, но не так чтоб
уж очень много. Критично, когда кроилово начинается. - fk0(05.11.2020 17:33)
- Бесспорно, но у нас вроде разговор про исключения в прошивке
микроконтроллера. - Kabdim(05.11.2020 17:16)
- поделитесь подробным использованием Result<>, getLastError, (*onError) - Constantin24(03.11.2020 21:06)
- У Александреску где-то видео было, рекомендую: fk0(336 знак., 05.11.2020 17:38, ссылка, youtube)
- Исключения тормозят + прошивки как правило то место где все
исключительные ситуации должны быть обработаны сознательно. По
крайней мере у меня это так. Поэтому для меня bool,
Result<>, getLastError, (*onError) - каждая в своих
ситуациях лучше исключения. Kabdim(57 знак., 03.11.2020 12:08)