и о культистах
Aug. 3rd, 2014 09:37 pmДядя из позапрошлого поста сослался на свой собственный разбор того, почему использовать goto не только плохо, но еще и иногда хорошо.
И действительно, как вспомню сколько было потрачено моего времени на борьбу с запретом goto, с запретом множественных точек выхода, с венгерской нотацией (в майкрософтовском смысле), с обязательной проверкой всех аргументов в каждой функции… аж вздрогну. Сколько этих безумных, дебильных карго-культов накопилось в индустрии… и никто не считает нужным не то что бороться с ними, а даже и просто понять контекст в котором эти запреты были актуальны, а так… что-то где-то слышали, и при этом уже рвутся в бой писать правила игры. У них что, в детстве в песочнице всё время совочек отбирали, или что?
И действительно, как вспомню сколько было потрачено моего времени на борьбу с запретом goto, с запретом множественных точек выхода, с венгерской нотацией (в майкрософтовском смысле), с обязательной проверкой всех аргументов в каждой функции… аж вздрогну. Сколько этих безумных, дебильных карго-культов накопилось в индустрии… и никто не считает нужным не то что бороться с ними, а даже и просто понять контекст в котором эти запреты были актуальны, а так… что-то где-то слышали, и при этом уже рвутся в бой писать правила игры. У них что, в детстве в песочнице всё время совочек отбирали, или что?
no subject
Date: 2014-08-03 09:15 pm (UTC)no subject
Date: 2014-08-03 09:18 pm (UTC)no subject
Date: 2014-08-03 09:16 pm (UTC)no subject
Date: 2014-08-03 09:19 pm (UTC)no subject
Date: 2014-08-03 09:22 pm (UTC)no subject
Date: 2014-08-03 09:24 pm (UTC)no subject
Date: 2014-08-03 09:27 pm (UTC)Меня например CamelCase выбешивает как утроение :))
Впрочем и венгерская нотация и еще много-много чего.
Мне, как человеку пишущему софт в 99% случаев под микроконтроллеры, да еще и без использования всяких там либ и HAL - вообще на "обычные, комповые" программы смотреть больно :)
no subject
Date: 2014-08-03 09:29 pm (UTC)no subject
Date: 2014-08-03 09:31 pm (UTC)no subject
Date: 2014-08-03 09:36 pm (UTC)http://stackoverflow.com/questions/111933/why-shouldnt-i-use-hungarian-notation
Гуглится легко в общем; скорее всего имела место неоднозначность перевода type|purpose|kind. Пугает то, с какой легкостью бессмысленное, в общем, действие подхватили ширнармассы.
no subject
Date: 2014-08-04 04:38 am (UTC)плюс, венгерская нотация обычно ассоциируется с вин32апи, где вместо понятного
приходится писать что-то типа
что заметно менее читабельно.
no subject
Date: 2014-08-04 10:24 pm (UTC)проверка аргументов может быть полезна для того, чтобы нормально журналировать ошибки а не производить segfault на каждый чих.
(или заёбывающий жабий null pointer reference во всяких говнопродуктах).
no subject
Date: 2014-08-05 08:16 am (UTC)no subject
Date: 2014-08-05 03:22 pm (UTC)Ну а размер кода - препроцессор никто не отменял :)
Как обрабатывать - должно быть единое соглашение, возвращать E_INVALID_ARG, поднимать исключение, делать abort() - надо придерживаться единого стандарта, принятого для данного проекта.
Я на эту тему у себя писал, код проверок в грамотном коде на C занимает БОЛЬШУЮ часть объёма. Если write с неправильным файловым дескриптором вызывает kernel panic - это моветон :)
А любая пропущенная условно ненужная проверка рано или поздно окажется в security bulletin. Ибо если те функции, которые есть сейчас, всегда передают правильные аргументы, рано или поздно появится новая, которая в какой-то ситуации передаст неправильные.
no subject
Date: 2014-08-05 04:04 pm (UTC)Поймите же наконец вы, поборники обсессивно-компульсивного стиля кодирования, что любая, абсолютно любая ошибка означает, что запорот некоторый кусок работы, и чтобы дальше осмысленно продолжать, надо восстановиться. И закладывается такая возможность на этапе системного проектирования, причём в каждом конкретном случае и на каждом уровне абстракции методы восстановления будут свои (где-то можно и процесс уронить, перезапустив джоб потом в супервайзере). Иногда можно и проверку аргументов сделать, чаще всего это осмыслено на межмодульных интерфейсах, но и она не решает всех проблем. А пихать проверку всех подряд аргументов в coding standard и на этом успокаиваться — долбоебизм, за который надо ссаными тряпками гнать из профессии. Пример:
char *join(char **array) { size_t total = getsize(array) char * buf = malloc(total); ... char * r = buf; for(...) { buf = _concat(buf, array[..]); } ... return r; }вот кому и чем поможет, если _concat в приведенном примере будет проверять свои аргументы (при условии что она является внутренней для данного модуля)?
> Я на эту тему у себя писал
ссылку?
no subject
Date: 2014-08-05 07:06 pm (UTC)no subject
Date: 2014-08-05 07:10 pm (UTC)я, предлагаю, пользуясь электрической аналогией, не вешать автоматические расцепители и узо на каждую розетку.
no subject
Date: 2014-08-05 07:23 pm (UTC)тут вопрос в затратах - стоит ли сдуру воткнутый электрочайник вырубившегося компа или хрен с ним. вопрос, хочешь ли ты об этом поговорить :)