170 похожих чатов

Ну вот у меня любопытство какое... Я иногда встречаю у

народа утилиты типа такой (псевдокод)

void Message::fatal(const char *fmt, ...)
{
fprintf(stderr, "....");
exit(1);
}

Порой даже в приличных проектах. И по сему поводу у меня сразу несколько вопросов. Я смотрю на это и вижу:

"Я, как программист, хочу сообщить пользователю о некоторой фатальной ошибке."

Акцент здесь на "сообщить" и "пользователю". Однако код выше делает более чем одну вещь. Кроме сообщения пользователю, он посылает сообщение программе (о завершении).

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

Я даже не говорю, что несколько странно делегировать завершение программы объекту сообщения, чья очевидная функциональность включает только информационные сообщения.

Ведь явное лучше, чем неявное? Или народ в плюсовой экосистеме в принципе не напрягает себя подобными мыслями?

19 ответов

14 просмотров

fatal значит шо усё плохо, инварианты нарушены, продолжать выполнение программы опасно. Поэтому обычно на fatal вешается доп. контракт - гарантировать "невыполнение" кода далее.

Kirill Bolshakov
fatal значит шо усё плохо, инварианты нарушены, п...

Так что всё логично. Другой вопрос - как организовать "невыполнение"

Ну... все твои доводы правомочны. Но это -- С-style. Конечно, надо бросать исключение, ловить их в main, и выходить.

> Ведь явное лучше, чем неявное это какой-то лозунг из другой экосистемы

Serghei-Iakovlev Автор вопроса
Constantine Drozdov
> Ведь явное лучше, чем неявное это какой-то лозун...

Я глубоко убеждён что они его не изобрели впервые и я имею право им пользоваться даже не будучи их приверженцем )

На то оно и fatal

Serghei Iakovlev
Я глубоко убеждён что они его не изобрели впервые ...

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

Serghei-Iakovlev Автор вопроса
Artöm Bakri Al-Sarmini
На то оно и fatal

Если уж вам по одному названию (функции) всё стало понятно, то не возникает ли тут противоречия с другим названием (класса) ,которое как бы ничего не говорит про такую ответственность как завершение программы? ))

Serghei-Iakovlev Автор вопроса
Constantine Drozdov
Проблема, что это лозунг, и он не проводится в жиз...

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

Serghei Iakovlev
Ну, если не относиться к этому как догме или лозун...

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

Serghei Iakovlev
Если уж вам по одному названию (функции) всё стало...

А почему должен? Вы хотите отдельный класс FatalMessage?

> сэкономить строчку. Если программа "штатно" продолжает работу после фатальной ошибки, либо она не фатальная, либо баг в обработке ошибок

Serghei-Iakovlev Автор вопроса
Artöm Bakri Al-Sarmini
А почему должен? Вы хотите отдельный класс FatalMe...

Это не самый плохой подход в дизайне опирающимся на нейминг :) Кроме того, как же обсуждалось выше, есть события, исключения, явный exit(1) - куча вариантов. Message::fatal с exit внутри тоже работает, но мне он кажется самым не красивым и не практичным решением

Serghei-Iakovlev Автор вопроса

Не надо думать явное или неявное, это - просто С-говно, тут не надо размышлять и медитировать, надо брать лопату и убирать.

Vladimir
exit(1) ?

один из вариантов

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта