Eugene Muzychenko
2021-09-03 07:35:53 UTC
Привет!
03 Sep 21 08:50, you wrote to Nil A:
VN> При этом нет огромного количества граблей C/C++ с undefined behavior.
Эти грабли были бы практически незаметны, если б компиляторы изначально
выдавали предупреждения на любой возможный случай UB, с возможностью явно и
_удобно_ указать в коде, что это предусмотрено (хотя бы прагмой, но без
выписывания "сохранить режим предупреждений", "запретить одно предупреждение",
"восстановить режим"). Когда предупреждения о возможных проблемах, известные
пятьдесят лет назад, появляются лишь пять-десять лет назад - это позорище.
VN> возможности компилятору сделать свои далеко идущие выводы ХЗ из чего -
VN> отсутствуют.
И в таких случаях тоже нужны предупреждения.
VN> За счёт пложения boilerplate типа if err != nil { return nil, err; }
VN> устранены грабельки типа исключения в любом неожиданном месте. (Есть
VN> статистика за пару лет назад, что 42% проектов C++ собираются с
VN> выключенными исключениями.
Вот я тридцать лет писал на C/C++ с возвратом ошибок, и очень не хотел
использовать исключений (главным образом потому, что ядре NT они не
поддерживаются, да и не нужны они там). Когда функции большие, это достаточно
удобно. Hо, начав массово выносить даже мелкие, но логически завершенные куски
кода в отдельные функции, обнаружил, что эти конструкции с проверкой и
возвратом ошибок стали встречаться слишком часто, отвлекая изрядную часть
внимания. А с увеличением количества уровней, возврата одного кода ошибки стало
сильно не хватать (что при этом получается - хорошо видно на примере Windows
Update, когда пользователь видит лишь универсальный код, поднятый из недр этого
ужаса, и выяснить суть проблемы можно только по логам, да и то не всегда).
Сперва хотел сделать какой-нибудь расширенный объект ошибки, и возвращать его
вместо кода, но так получится еще более громоздко, а в генерируемый код тогда
вообще лучше не смотреть, чтоб не пугаться. Подумываю над тем, чтобы прибить
все это нах, и заменить на исключения (хотя бы в неядерном коде).
Всего доброго!
Евгений Музыченко
eu-***@muzy-chen-ko.net (все дефисы убрать)
03 Sep 21 08:50, you wrote to Nil A:
VN> При этом нет огромного количества граблей C/C++ с undefined behavior.
Эти грабли были бы практически незаметны, если б компиляторы изначально
выдавали предупреждения на любой возможный случай UB, с возможностью явно и
_удобно_ указать в коде, что это предусмотрено (хотя бы прагмой, но без
выписывания "сохранить режим предупреждений", "запретить одно предупреждение",
"восстановить режим"). Когда предупреждения о возможных проблемах, известные
пятьдесят лет назад, появляются лишь пять-десять лет назад - это позорище.
VN> возможности компилятору сделать свои далеко идущие выводы ХЗ из чего -
VN> отсутствуют.
И в таких случаях тоже нужны предупреждения.
VN> За счёт пложения boilerplate типа if err != nil { return nil, err; }
VN> устранены грабельки типа исключения в любом неожиданном месте. (Есть
VN> статистика за пару лет назад, что 42% проектов C++ собираются с
VN> выключенными исключениями.
Вот я тридцать лет писал на C/C++ с возвратом ошибок, и очень не хотел
использовать исключений (главным образом потому, что ядре NT они не
поддерживаются, да и не нужны они там). Когда функции большие, это достаточно
удобно. Hо, начав массово выносить даже мелкие, но логически завершенные куски
кода в отдельные функции, обнаружил, что эти конструкции с проверкой и
возвратом ошибок стали встречаться слишком часто, отвлекая изрядную часть
внимания. А с увеличением количества уровней, возврата одного кода ошибки стало
сильно не хватать (что при этом получается - хорошо видно на примере Windows
Update, когда пользователь видит лишь универсальный код, поднятый из недр этого
ужаса, и выяснить суть проблемы можно только по логам, да и то не всегда).
Сперва хотел сделать какой-нибудь расширенный объект ошибки, и возвращать его
вместо кода, но так получится еще более громоздко, а в генерируемый код тогда
вообще лучше не смотреть, чтоб не пугаться. Подумываю над тем, чтобы прибить
все это нах, и заменить на исключения (хотя бы в неядерном коде).
Всего доброго!
Евгений Музыченко
eu-***@muzy-chen-ko.net (все дефисы убрать)